Colección de monedas 2D en Unity
Elegir y coleccionar monedas se ha convertido en un elemento básico en los juegos 2D, especialmente en 2D Platformers.
Para recoger una moneda en Unity necesitaremos crear un script que se adjuntará a una moneda objeto y se destruirá una vez que el jugador entre en contacto con él, actualizando el valor del contador.
![]()
Usaré el Controlador de caracteres 2D, pero puedes omitir esta parte si ya tienes un controlador 2D.
Pasos
Para hacer una moneda 2D que se pueda recoger y recolectar, siga los pasos a continuación:
- Cree un nuevo GameObject (GameObject -> Create Empty) y asígnele un nombre "Coin"
- Adjunte un componente SpriteRenderer al objeto "Coin"
- Asigne su sprite de moneda al SpriteRenderer (puede usar la imagen a continuación, asegúrese de que el Tipo de textura en Configuración de importación esté configurado en 'Sprite (2D and UI)')

- Escale el objeto Moneda hasta el tamaño deseado
- Cambie la posición del eje de la moneda 'Z' para que coincida con la posición del jugador
- Adjunte un componente BoxCollider2D al objeto "Coin"
- Cree un nuevo script, llámelo "SC_2DCoin", elimine todo y luego pegue el siguiente código dentro de él:
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);
}
}
}- Adjunte el script SC_2DCoin al objeto "Coin"
- Seleccione su objeto de jugador y asegúrese de que su etiqueta esté configurada en "Player" (esto es necesario para poder recoger la moneda)

La moneda ya está lista, puedes guardarla en Prefab y duplicarla alrededor del nivel.
Para crear un contador de monedas, siga los pasos a continuación:
- Cree una nueva imagen de interfaz de usuario haciendo clic con el botón derecho en la vista de jerarquía -> Interfaz de usuario -> Imagen y asígnele un nombre "CoinIcon"
- Asigne el sprite de moneda al componente Imagen
- Cambie la alineación de RectTransform a 'top left', gire a (0, 1), publique X a '5', pos Y a '-5', ancho y alto a '25'

- Cree un nuevo texto haciendo clic con el botón derecho en la vista de jerarquía -> IU -> Texto y asígnele un nombre "CoinCounter"
- Establezca "CoinCounter" RectTransform igual que "CoinIcon", excepto que establezca Pos X en '35' y Width en '160'
- Establezca Estilo de fuente de texto en 'Bold', Tamaño de fuente en 22, Alineación en 'left center' y Color en 'white'

- Cree un nuevo script, llámelo "SC_CoinCounter", elimine todo y luego pegue el siguiente código dentro:
El guión del contador de monedas aplicará el número de monedas al elemento Texto.
SC_ContadorMonedas.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();
}
}
}- Adjunte el script SC_CoinCounter al objeto de texto "CoinCounter"
Presiona Play y observa cómo las monedas desaparecen al contacto del jugador y se agregan a un contador.