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.

Sharp Coder Reprodutor de vídeo

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

Imagem Transparente de Moeda de Ouro

  • 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.