Coleta de moedas 2D no Unity
Colheita e coleta de moedas tornaram-se um item básico em jogos 2D, especialmente em Jogos de plataforma 2D.
Para pegar uma moeda em Unity precisaremos criar um script que será anexado a um coin objeto e será destruído assim que o jogador entrar em contato com ele, atualizando o valor do contador.
Eu usarei o Controlador de personagem 2D, mas você pode pular esta parte se já tiver um controlador 2D.
Passos
Para fazer uma moeda 2D que pode ser apanhada e coletada, siga os passos abaixo:
- Crie um novo GameObject (GameObject -> Create Empty) e nomeie-o como "Coin"
- Anexar um componente SpriteRenderer ao objeto "Coin"
- Atribua seu sprite de moeda ao SpriteRenderer (você pode usar a imagem abaixo, certifique-se de que o tipo de textura nas configurações de importação esteja definido como 'Sprite (2D e UI)')
- Escale o objeto Moeda até o tamanho desejado
- Mude a posição do eixo da moeda 'Z' para que corresponda à posição do jogador
- Anexar um componente BoxCollider2D ao objeto "Coin"
- Crie um novo script, chame-o de "SC_2DCoin", remova tudo dele e cole o código abaixo dentro dele:
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().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);
}
}
}
- Anexar o script SC_2DCoin ao objeto "Coin"
- Selecione seu objeto de jogador e certifique-se de que sua etiqueta esteja definida como "Player" (isso é necessário para poder pegar a moeda)
A moeda agora está pronta, você pode salvá-la em Prefab e duplicá-la no nível.
Para criar um contador de moedas, siga os passos abaixo:
- Crie uma nova imagem de interface do usuário clicando com o botão direito do mouse na visualização Hierarchy -> UI -> Image e nomeie-a como "CoinIcon"
- Atribuir sprite de moeda ao componente de imagem
- Alterar alinhamento RectTransform para 'top left', Pivot para (0, 1), Post X para '5', Pos Y para '-5', Largura e Altura para '25'
- Crie um novo texto clicando com o botão direito do mouse na visualização Hierarchy -> UI -> Text e nomeie-o como "CoinCounter"
- Definir "CoinCounter" RectTransform igual a "CoinIcon", exceto definir Pos X como '35' e Largura como '160'
- Definir estilo da fonte do texto como 'Bold', tamanho da fonte como 22, alinhamento como 'left center' e cor como 'white'
- Crie um novo script, chame-o de "SC_CoinCounter", remova tudo dele e cole o código abaixo dentro dele:
O script do contador de moedas aplicará o número de moedas ao elemento Texto.
SC_Counter.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();
}
// 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();
}
}
}
- Anexar o script SC_CoinCounter ao "CoinCounter" Objeto de texto
Pressione Play e observe as moedas desaparecerem com o contato do jogador e serem adicionadas a um contador.