I. Introduction▲
Cette série explique pas à pas la création d'un jeu 2D dans lequel un vaisseau collecte des pépites d'or.
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.
II. Vidéo▲
Unity - UFO 2D - Ramasser les pépites d'or
III. Résumé▲
Dans cette vidéo, vous allez implémenter le ramassage des pépites d'or.
III-A. Ramasser des objets▲
Pour permettre au joueur de ramasser les pépites d'or, nous devons détecter lorsque le vaisseau entre en collision avec une pépite. Cette collision doit déclencher une action. Aussi, il est important de vérifier que l'objet en collision est bien une pépite d'or. En effet, les murs sont aussi des objets pouvant entrer en collision avec le joueur.
Dans Unity, des fonctions sont prévues pour être appelées lorsque tel ou tel événement se produit. Dans notre cas, la fonction OnTriggerEnter2D() est appelée lorsque l'objet entre en collision.
Lorsque le joueur entre en collision avec une pépite, nous souhaitons désactiver l'objet de la pépite et ainsi la faire disparaître. Pour cela, nous utilisons la fonction SetActive().
Pour savoir si l'objet en collision est bien une pépite, nous utilisons le système de tags. En effet, toutes les pépites seront marquées de la mention « PickUp » afin de les reconnaître. La fonction CompareTag() permet de savoir si c'est le bon tag.
Voici le script résultant :
using
UnityEngine;
using
System.
Collections;
public
class
CompletePlayerController :
MonoBehaviour {
public
float
speed;
// Variable à virgule flottante pour sauvegarder la vitesse du joueur
private
Rigidbody2D rb2d;
// stocke une référence vers le composant Rigidbody2D nécessaire pour utiliser la physique 2D.
// Initialisation
void
Start
(
)
{
// Récupère et conserve la référence vers le composant Rigidbody2D afin de pouvoir y accéder plus tard.
rb2d =
GetComponent<
Rigidbody2D>
(
);
}
// La fonction FixedUpdate() est appelée à intervalle régulier et est indépendante du nombre d'images par seconde. Placez votre code physique ici.
void
FixedUpdate
(
)
{
// Stocke l'entrée horizontale dans la variable moveHorizontal.
float
moveHorizontal =
Input.
GetAxis (
"Horizontal"
);
// Stocke l'entrée verticale dans la variable moveVertical.
float
moveVertical =
Input.
GetAxis (
"Vertical"
);
// Utilise les deux nombres pour créer un Vector2.
Vector2 movement =
new
Vector2 (
moveHorizontal,
moveVertical);
// Appelle la fonction AddForce() du Rigidbody2D rb2d avec le mouvement multiplié par la vitesse.
rb2d.
AddForce (
movement *
speed);
}
// La fonction OnTriggerEnter2D() est appelée chaque fois qu'un objet recouvre le déclencheur.
void
OnTriggerEnter2D
(
Collider2D other)
{
// Vérifie si le paramètre de la fonction est marqué "PickUp", Si c'est le cas...
if
(
other.
gameObject.
CompareTag
(
"PickUp"
))
{
other.
gameObject.
SetActive
(
false
);
}
}
}
Pour définir le tag des pépites, vous devez modifier le préfabriqué. Ainsi, toutes les pépites recevront la modification.
Si vous testez le jeu, vous verrez que le vaisseau est en collision avec les pépites, mais que les pépites sont équivalentes à des murs. En effet, le moteur physique calcule les collisions et ne permet pas à deux « Collider » de se traverser. Toutefois, grâce à la propriété « Is Trigger », nous pouvons indiquer au moteur physique que l'objet peut être traversé tout en effectuant les calculs physiques. C'est ce qu'il nous faut pour les pépites.
Même si à ce moment, la collecte des pépites d'or est fonctionnelle, elle n'est pas efficace. En effet, les pépites d'or sont considérées par Unity comme des objets statiques, toutefois, elles sont animées. À cause de ce comportement, Unity doit recalculer la physique de tous les objets statiques, ce qui n'est pas efficace. Si nous rajoutons un « Rigidbody2D » aux pépites d'or, alors Unity sait que l'objet est dynamique. Par contre, cela veut aussi dire que l'objet doit suivre les lois de la physique, telles que la gravité. Pour parer à ce comportement, il faut activer la propriété « Is Kinematic ».
IV. Ressources▲
Vous pouvez télécharger les ressources pour ce projet sur l'Asset Store de Unity.
V. Commenter▲
Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.