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 - Compter les pépites et afficher le score
III. Résumé▲
Dans cette vidéo, vous allez gérer le décompte des pépites d'or et afficher le score.
III-A. Décompte des pépites▲
Dans le script, il est nécessaire d'ajouter une variable pour garder en mémoire le nombre de pépites ramassées. La variable est incrémentée à travers la fonction OnTriggerEnter2D().
III-B. Afficher du texte à l'écran▲
Pour afficher du texte à l'écran, il faut ajouter un objet « Text » (nommé « CountText » et un second, pour le texte de victoire, nommé « WinText ») dans notre scène. Lors de l'ajout de cet élément, Unity ajoute un parent « Canvas » permettant la bonne disposition des éléments de l'interface utilisateur. Configurez les propriétés de l'objet afin de placer le texte suivant votre envie.
Le texte affiché à l'écran est défini dynamiquement à travers le script :
using UnityEngine;
using System.Collections;
// EN ajoutant ceci, vous pouvez accéder aux outils dans l'espace de nommage UI dont les outils Text.
using UnityEngine.UI;
public class CompletePlayerController : MonoBehaviour {
public float speed; // Variable à virgule flottante pour sauvegarder la vitesse du joueur
public Text countText; // Stocke une référence sur le composant texte qui affichage le nombre d'éléments ramassés.
public Text winText; // Stocke une référence sur le composant texte permettant d'afficher le message 'You win'.
private Rigidbody2D rb2d; // stocke une référence vers le composant Rigidbody2D nécessaire pour utiliser la physique 2D.
private int count; // Entier pour stocker les objets ramassés.
// 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> ();
// Initialise le compteur à zéro.
count = 0;
// Initialise winText à vide car nous n'avons pas encore gagné.
winText.text = "";
// Appelle la fonction SetCountText qui met à jour le texte avec la valeur du compteur.
SetCountText ();
}
// 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"))
// ... et désactive l'objet avec lequel on est en collision.
other.gameObject.SetActive(false);
// ajoute 1 au compteur.
count = count + 1;
// Met à jour le texte affiché.
SetCountText ();
}
// Cette fonction met à jour le texte affichant le nombre d'objets ramassés et affiche le message de victoire si nous les avons tous.
void SetCountText()
{
// Définit le texte de l'objet countText object à "Count: " suivi du nombre stocké dans notre variable.
countText.text = "Count: " + count.ToString ();
// Vérifie si nous avons ramassé les 12 objets. Si c'est le cas...
if (count >= 12)
//... définit le texte de l'objet object à "You win!"
winText.text = "You win!";
}
}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.




