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.

Sharp Coder Lecteur vidéo

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)')

Image transparente de la pièce d'or

  • 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.

Articles suggérés
Comment utiliser le nouveau système d'eau HDRP dans Unity
Comment utiliser la manette Xbox dans Unity
Script pour créer un interrupteur d'éclairage dans Unity
Comment configurer le contrôleur de joystick pour le mouvement dans Unity
Indicateur de cible dans Unity
Script C# pour créer un effet de trace de curseur dans Unity
Effet de ralenti dans Unity