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.
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)')
- 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.