2D-møntindsamling i enhed

Møntplukning og -indsamling er blevet en fast bestanddel i 2D-spil, især i 2D Platformers.

For at hente en mønt i Unity skal vi oprette et script, der vil blive knyttet til et coin objekt og vil blive ødelagt, når spilleren kommer i kontakt med det, opdatering af tællerværdien.

Sharp Coder Videoafspiller

Jeg vil bruge 2D Character Controller, men du kan springe denne del over, hvis du allerede har en 2D-controller.

Trin

Følg nedenstående trin for at lave en 2D-mønt, der kan samles op og indsamles:

  • Opret et nyt GameObject (GameObject -> Create Empty) og navngiv det "Coin"
  • Vedhæft en SpriteRenderer-komponent til "Coin"-objektet
  • Tildel din møntsprite til SpriteRenderer (du kan bruge billedet nedenfor, sørg for at teksturtypen i importindstillingerne er indstillet til 'Sprite (2D and UI)')

Gennemsigtigt billede af guldmønt

  • Skaler møntobjektet til den ønskede størrelse
  • Skift møntens 'Z'-akseposition, så den matcher spillerens position
  • Vedhæft en BoxCollider2D-komponent til "Coin"-objektet
  • Opret et nyt script, kald det "SC_2DCoin", fjern alt fra det, og indsæt derefter koden nedenfor 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);
        }
    }
}
  • Vedhæft SC_2DCoin-scriptet til "Coin"-objektet
  • Vælg dit spillerobjekt, og sørg for, at dets tag er indstillet til "Player" (dette er nødvendigt for at kunne hente mønten)

Mønten er nu klar, du kan gemme den i Prefab og duplikere den rundt om niveauet.

Følg nedenstående trin for at oprette en mønttæller:

  • Opret et nyt brugergrænsefladebillede ved at højreklikke på hierarkivisningen -> brugergrænseflade -> billede og navngive det "CoinIcon"
  • Tildel møntsprite til billedkomponenten
  • Skift RectTransform Alignment til 'top left', Pivot til (0, 1), Post X til '5', Pos Y til '-5', Bredde og Højde til '25'

  • Opret ny tekst ved at højreklikke på hierarkivisningen -> UI -> Tekst og navngive den "CoinCounter"
  • Indstil "CoinCounter" RectTransform det samme som "CoinIcon", bortset fra at Pos X skal indstilles til '35' og Width til '160'
  • Indstil tekstskrifttype til 'Bold', skriftstørrelse til 22, justering til 'left center' og farve til 'white'

  • Opret et nyt script, kald det "SC_CoinCounter", fjern alt fra det, og indsæt derefter koden nedenfor i det:

Mønttællerscriptet vil anvende antallet af mønter på tekstelementet.

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();
        }
    }
}
  • Vedhæft SC_CoinCounter-scriptet til "CoinCounter"-tekstobjektet

Tryk på Play og se mønterne forsvinde ved spillerkontakt og føjes til en tæller.