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.