Collezione di monete 2D in unità
La raccolta e la raccolta di monete sono diventate un punto fermo nei giochi 2D, specialmente nei platform 2D.
Per raccogliere una moneta in Unity dovremo creare uno script che verrà allegato a una moneta oggetto e verrà distrutto una volta che il giocatore entrerà in contatto con esso, aggiornando il valore del contatore.
![]()
Userò il Controller personaggio 2D, ma puoi saltare questa parte se hai già un controller 2D.
Passi
Per creare una moneta 2D che può essere raccolta e raccolta, procedi nel seguente modo:
- Crea un nuovo GameObject (GameObject -> Crea vuoto) e assegnagli un nome "Coin"
- Allega un componente SpriteRenderer all'oggetto "Coin"
- Assegna il tuo coin sprite allo SpriteRenderer (puoi usare l'immagine qui sotto, assicurati che il Tipo di texture nelle Impostazioni di importazione sia impostato su 'Sprite (2D and UI)')

- Ridimensiona l'oggetto Coin fino alla dimensione desiderata
- Cambia la posizione dell'asse della moneta 'Z' in modo che corrisponda alla posizione del giocatore
- Collega un componente BoxCollider2D all'oggetto "Coin"
- Crea un nuovo script, chiamalo "SC_2DCoin", rimuovi tutto da esso quindi incolla il codice sottostante al suo interno:
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);
}
}
}- Allega lo script SC_2DCoin all'oggetto "Coin"
- Seleziona il tuo oggetto giocatore e assicurati che il suo tag sia impostato su "Player" (questo è necessario per poter raccogliere la moneta)

La moneta è ora pronta, puoi salvarla in Prefab e duplicarla per tutto il livello.
Per creare un contatore di monete, procedi nel seguente modo:
- Crea una nuova immagine dell'interfaccia utente facendo clic con il pulsante destro del mouse sulla vista Gerarchia -> UI -> Immagine e assegnale un nome "CoinIcon"
- Assegna lo sprite della moneta al componente Immagine
- Cambia RectTransform Alignment in 'top left', Pivot in (0, 1), Post X in '5', Pos Y in '-5', Larghezza e Altezza in '25'

- Crea un nuovo testo facendo clic con il pulsante destro del mouse sulla vista Gerarchia -> UI -> Testo e assegnagli un nome "CoinCounter"
- Imposta "CoinCounter" RectTransform come "CoinIcon", tranne imposta Pos X su '35' e Width su '160'
- Imposta Stile carattere testo su 'Bold', Dimensione carattere su 22, Allineamento su 'left center' e Colore su 'white'

- Crea un nuovo script, chiamalo "SC_CoinCounter", rimuovi tutto da esso quindi incolla il codice qui sotto al suo interno:
Lo script contamonete applicherà il numero di monete all'elemento Testo.
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();
}
}
}- Allega lo script SC_CoinCounter all'oggetto di testo "CoinCounter"
Premi Play e osserva che le monete scompaiono al contatto del giocatore e vengono aggiunte a un contatore.