Colectarea de monede 2D în Unity

Alegerea și colectarea de monede au devenit un element de bază în jocurile 2D, în special în 2D Platformers.

Pentru a ridica o monedă în Unity, va trebui să creăm un script care va fi atașat unui obiect coin și va fi distrus odată ce jucătorul intră în contact cu acesta, actualizarea valorii contorului.

Sharp Coder Video player

Voi folosi 2D Character Controller, dar puteți sări peste această parte dacă aveți deja un controler 2D.

Pași

Pentru a realiza o monedă 2D care poate fi ridicată și colectată, urmați pașii de mai jos:

  • Creați un nou GameObject (GameObject -> Create Empty) și denumiți-l "Coin"
  • Atașați o componentă SpriteRenderer la obiectul "Coin"
  • Atribuiți-vă monedele sprite-ului SpriteRenderer (puteți folosi imaginea de mai jos, asigurați-vă că Tipul de textură din Setările de import este setat la 'Sprite (2D and UI)')

Moneda de aur Imagine transparentă

  • Scalați obiectul Monedă până la dimensiunea dorită
  • Schimbați poziția axei monedei 'Z' astfel încât să se potrivească cu poziția jucătorului
  • Atașați o componentă BoxCollider2D la obiectul "Coin"
  • Creați un script nou, numiți-l "SC_2DCoin", eliminați totul din el, apoi lipiți codul de mai jos în interiorul lui:

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);
        }
    }
}
  • Atașați scriptul SC_2DCoin la obiectul "Coin"
  • Selectați obiectul dvs. de jucător și asigurați-vă că eticheta acestuia este setată la "Player" (acest lucru este necesar pentru a putea ridica moneda)

Moneda este acum gata, o puteți salva în Prefab și o puteți duplica în jurul nivelului.

Pentru a crea un contor de monede, urmați pașii de mai jos:

  • Creați o nouă imagine UI făcând clic dreapta pe vizualizarea Ierarhie -> UI -> Imagine și denumiți-o "CoinIcon"
  • Atribuiți monede sprite la componenta Imagine
  • Schimbați alinierea RectTransform la 'top left', Pivot la (0, 1), Post X la '5', Pos Y la '-5', Width and Height la '25'

  • Creați text nou făcând clic dreapta pe vizualizarea Ierarhie -> UI -> Text și denumiți-l "CoinCounter"
  • Setați "CoinCounter" RectTransform la fel ca "CoinIcon", cu excepția setării Pos X la '35' și Width la '160'
  • Setați stilul fontului text la 'Bold', Dimensiunea fontului la 22, Alinierea la 'left center' și Culoare la 'white'

  • Creați un nou script, numiți-l "SC_CoinCounter", eliminați totul din el, apoi lipiți codul de mai jos în interiorul lui:

Scriptul contor monede va aplica numărul de monede elementului Text.

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();
        }
    }
}
  • Atașați scriptul SC_CoinCounter la obiectul "CoinCounter" Text

Apăsați pe Play și observați că monedele dispar la contactul jucătorului și sunt adăugate la un contor.