Zbieranie monet 2D w Unity
Zbieranie i zbieranie monet stało się podstawą gier 2D, szczególnie w platformówkach 2D.
Aby podnieść monetę w Unity, będziemy musieli stworzyć skrypt, który zostanie dołączony do obiektu coin i zostanie zniszczony, gdy gracz wejdzie z nim w kontakt, aktualizacja wartości licznika.
Będę używał kontrolera postaci 2D, ale możesz pominąć tę część, jeśli masz już kontroler 2D.
Kroki
Aby stworzyć monetę 2D, którą można podnieść i zebrać, wykonaj poniższe czynności:
- Utwórz nowy obiekt GameObject (GameObject -> Utwórz pusty) i nadaj mu nazwę "Coin"
- Dołącz komponent SpriteRenderer do obiektu "Coin"
- Przypisz duszka monety do SpriteRenderer (możesz użyć poniższego obrazu, upewnij się, że typ tekstury w ustawieniach importu jest ustawiony na 'Sprite (2D and UI)')
- Skaluj obiekt Moneta do żądanego rozmiaru
- Zmień pozycję osi monety 'Z' tak, aby odpowiadała pozycji gracza
- Dołącz komponent BoxCollider2D do obiektu "Coin"
- Utwórz nowy skrypt, nazwij go "SC_2DCoin", usuń z niego wszystko, a następnie wklej do niego poniższy kod:
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);
}
}
}
- Dołącz skrypt SC_2DCoin do obiektu "Coin"
- Wybierz obiekt gracza i upewnij się, że jego znacznik jest ustawiony na "Player" (jest to konieczne, aby móc podnieść monetę)
Moneta jest już gotowa, możesz ją zapisać w Prefab i powielić na każdym poziomie.
Aby utworzyć licznik monet, wykonaj poniższe czynności:
- Utwórz nowy obraz interfejsu użytkownika, klikając prawym przyciskiem myszy widok hierarchii -> interfejs użytkownika -> obraz i nadaj mu nazwę "CoinIcon"
- Przypisz duszka monety do komponentu Obraz
- Zmień wyrównanie RectTransform na 'top left', obrót na (0, 1), pocztę X na '5', pozycję Y na '-5', szerokość i wysokość na '25'
- Utwórz nowy tekst, klikając prawym przyciskiem myszy widok Hierarchia -> Interfejs użytkownika -> Tekst i nadaj mu nazwę "CoinCounter"
- Ustaw "CoinCounter" RectTransform tak samo jak "CoinIcon", z tą różnicą, że ustaw Pos X na '35' i Szerokość na '160'
- Ustaw styl czcionki tekstu na 'Bold', rozmiar czcionki na 22, wyrównanie na 'left center' i kolor na 'white'
- Utwórz nowy skrypt, nazwij go "SC_CoinCounter", usuń z niego wszystko, a następnie wklej do niego poniższy kod:
Skrypt licznika monet zastosuje liczbę monet do elementu Tekst.
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();
}
}
}
- Dołącz skrypt SC_CoinCounter do obiektu tekstowego "CoinCounter"
Naciśnij przycisk Graj i obserwuj, jak monety znikają po kontakcie z graczem i są dodawane do licznika.