2D-myntsamling i enhet

Myntplockning och myntsamlande har blivit en häftklammer i 2D-spel, särskilt i 2D-plattformar.

För att plocka upp ett mynt i Unity måste vi skapa ett skript som kopplas till ett mynt-objekt och får förstörs när spelaren kommer i kontakt med den, vilket uppdaterar räknarvärdet.

Sharp Coder Videospelare

Jag kommer att använda 2D Character Controller, men du kan hoppa över den här delen om du redan har en 2D-kontroller.

Steg

För att göra ett 2D-mynt som kan plockas upp och samlas in, följ stegen nedan:

  • Skapa ett nytt GameObject (GameObject -> Create Empty) och namnge det "Coin"
  • Bifoga en SpriteRenderer-komponent till "Coin"-objektet
  • Tilldela din myntsprite till SpriteRenderer (du kan använda bilden nedan, se till att texturtypen i importinställningarna är inställd på 'Sprite (2D and UI)')

Genomskinlig bild för guldmynt

  • Skala myntobjektet till önskad storlek
  • Ändra myntets 'Z'-axelposition så att den matchar spelarens position
  • Bifoga en BoxCollider2D-komponent till "Coin"-objektet
  • Skapa ett nytt skript, kalla det "SC_2DCoin", ta bort allt från det och klistra in koden nedan i det:

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);
        }
    }
}
  • Bifoga SC_2DCoin-skriptet till "Coin"-objektet
  • Välj ditt spelarobjekt och se till att dess tagg är inställd på "Player" (detta behövs för att kunna plocka upp myntet)

Myntet är nu klart, du kan spara det i Prefab och duplicera det runt nivån.

För att skapa en mynträknare, följ stegen nedan:

  • Skapa en ny UI-bild genom att högerklicka på hierarkivyn -> UI -> Bild och namnge den "CoinIcon"
  • Tilldela myntsprite till bildkomponenten
  • Ändra RectTransform Alignment till 'top left', Pivot till (0, 1), Post X till '5', Pos Y till '-5', Bredd och Höjd till '25'

  • Skapa ny text genom att högerklicka på hierarkivyn -> UI -> Text och namnge den "CoinCounter"
  • Ställ in "CoinCounter" RectTransform på samma sätt som "CoinIcon", förutom att ställa in Pos X till '35' och Width till '160'
  • Ställ in texttypsnittsstil till 'Bold', teckenstorlek till 22, justering till 'left center' och färg till 'white'

  • Skapa ett nytt skript, kalla det "SC_CoinCounter", ta bort allt från det och klistra in koden nedan i det:

Mynträknarens skript kommer att tillämpa antalet mynt på textelementet.

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();
        }
    }
}
  • Bifoga SC_CoinCounter-skriptet till "CoinCounter"-textobjektet

Tryck på Spela och observera att mynten försvinner vid spelarkontakt och läggs till i en räknare.