Collecte de pièces 2D dans Unity
La collecte et la collecte de pièces sont devenues incontournables dans les jeux 2D, en particulier dans les 2D Platformers.
Pour ramasser une pièce en Unity, nous devrons créer un script qui sera attaché à une pièce objet et sera détruit une fois que le joueur entrera en contact avec lui, mettant à jour la valeur du compteur.
J'utiliserai le contrôleur de personnage 2D, mais vous pouvez ignorer cette partie si vous avez déjà un contrôleur 2D.
Pas
Pour créer une pièce 2D pouvant être ramassée et collectée, suivez les étapes ci-dessous:
- Créez un nouveau GameObject (GameObject -> Create Empty) et nommez-le "Coin"
- Attachez un composant SpriteRenderer à l'objet "Coin"
- Attribuez votre sprite de pièce au SpriteRenderer (vous pouvez utiliser l'image ci-dessous, assurez-vous que le type de texture dans les paramètres d'importation est défini sur 'Sprite (2D and UI)')
- Mettez à l'échelle l'objet Coin jusqu'à la taille souhaitée
- Modifiez la position de l'axe de la pièce 'Z' afin qu'elle corresponde à la position du joueur
- Attachez un composant BoxCollider2D à l'objet "Coin"
- Créez un nouveau script, appelez-le "SC_2DCoin", supprimez tout puis collez le code ci-dessous à l'intérieur:
SC_2DCoin.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SC_2DCoin : MonoBehaviour
{
//Keep track of total picked coins (Since the value is static, it can be accessed at "SC_2DCoin.totalCoins" from any script)
public static int totalCoins = 0;
void Awake()
{
//Make Collider2D as trigger
GetComponent<Collider2D>().isTrigger = true;
}
void OnTriggerEnter2D(Collider2D c2d)
{
//Destroy the coin if Object tagged Player comes in contact with it
if (c2d.CompareTag("Player"))
{
//Add coin to counter
totalCoins++;
//Test: Print total number of coins
Debug.Log("You currently have " + SC_2DCoin.totalCoins + " Coins.");
//Destroy coin
Destroy(gameObject);
}
}
}
- Attachez le script SC_2DCoin à l'objet "Coin"
- Sélectionnez votre objet joueur et assurez-vous que son tag est défini sur "Player" (cela est nécessaire pour pouvoir ramasser la pièce)
La pièce est maintenant prête, vous pouvez l'enregistrer dans Prefab et la dupliquer autour du niveau.
Pour créer un compteur de pièces, suivez les étapes ci-dessous:
- Créez une nouvelle image d'interface utilisateur en cliquant avec le bouton droit sur la vue Hiérarchie -> UI -> Image et nommez-la "CoinIcon"
- Attribuer un sprite de pièce au composant Image
- Modifiez RectTransform Alignment sur 'top left', Pivot sur (0, 1), Post X sur '5', Pos Y sur '-5', Width et Height sur '25'
- Créez un nouveau texte en cliquant avec le bouton droit sur la vue Hiérarchie -> UI -> Texte et nommez-le "CoinCounter"
- Définissez "CoinCounter" RectTransform comme "CoinIcon", sauf que vous définissez Pos X sur '35' et Width sur '160'
- Définissez le style de police du texte sur 'Bold', la taille de la police sur 22, l'alignement sur 'left center' et la couleur sur 'white'
- Créez un nouveau script, appelez-le "SC_CoinCounter", supprimez tout puis collez le code ci-dessous à l'intérieur:
Le script du compteur de pièces appliquera le nombre de pièces à l'élément Texte.
SC_CoinCounter.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SC_CoinCounter : MonoBehaviour
{
Text counterText;
// Start is called before the first frame update
void Start()
{
counterText = GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
//Set the current number of coins to display
if(counterText.text != SC_2DCoin.totalCoins.ToString())
{
counterText.text = SC_2DCoin.totalCoins.ToString();
}
}
}
- Attachez le script SC_CoinCounter à l'objet texte "CoinCounter"
Appuyez sur Play et observez que les pièces disparaissent au contact du joueur et sont ajoutées à un compteur.