2D-myntsamling i enhet
Myntplukking og innsamling har blitt en stift i 2D-spill, spesielt i 2D-plattformer.
For å plukke opp en mynt i Unity må vi lage et skript som festes til et mynt objekt og får ødelagt når spilleren kommer i kontakt med den, og oppdaterer tellerverdien.
Jeg kommer til å bruke 2D Character Controller, men du kan hoppe over denne delen hvis du allerede har en 2D-kontroller.
Trinn
Følg trinnene nedenfor for å lage en 2D-mynt som kan plukkes opp og samles inn:
- Opprett et nytt GameObject (GameObject -> Create Empty) og navngi det "Coin"
- Fest en SpriteRenderer-komponent til "Coin"-objektet
- Tildel myntspriten din til SpriteRenderer (du kan bruke bildet nedenfor, sørg for at teksturtypen i importinnstillingene er satt til 'Sprite (2D and UI)')
- Skaler myntobjektet til ønsket størrelse
- Endre mynt 'Z' akseposisjonen slik at den matcher spillerens posisjon
- Fest en BoxCollider2D-komponent til "Coin"-objektet
- Lag et nytt skript, kall det "SC_2DCoin", fjern alt fra det og lim inn 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);
}
}
}
- Fest SC_2DCoin-skriptet til "Coin"-objektet
- Velg spillerobjektet ditt og sørg for at taggen er satt til "Player" (dette er nødvendig for å kunne plukke opp mynten)
Mynten er nå klar, du kan lagre den i Prefab og duplisere den rundt nivået.
For å lage en myntteller, følg trinnene nedenfor:
- Opprett et nytt brukergrensesnittbilde ved å høyreklikke på hierarkivisningen -> brukergrensesnittet -> bilde og navngi det "CoinIcon"
- Tilordne myntsprite til bildekomponenten
- Endre RectTransform Alignment til 'top left', Pivot til (0, 1), Post X til '5', Pos Y til '-5', Bredde og Høyde til '25'
- Opprett ny tekst ved å høyreklikke på hierarkivisningen -> UI -> Tekst og gi den et navn "CoinCounter"
- Sett "CoinCounter" RectTransform på samme måte som "CoinIcon", bortsett fra sett Pos X til '35' og Width til '160'
- Sett tekstskriftstil til 'Bold', skriftstørrelse til 22, justering til 'left center' og farge til 'white'
- Lag et nytt skript, kall det "SC_CoinCounter", fjern alt fra det og lim inn koden nedenfor i det:
Mynttellerskriptet vil bruke antall mynter 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();
}
}
}
- Fest SC_CoinCounter-skriptet til "CoinCounter" tekstobjektet
Trykk på Play og se at myntene forsvinner ved spillerkontakt og legges til en teller.