En este tutorial, aprenderás a hacer que un objeto desaparezca cuando el jugador lo recoja, utilizando OnTriggerEnter()
para detectar la colisión.
✅ Cuando el jugador toca el objeto, este desaparece.
✅ Puede activarse una acción extra (como sumar puntos o mostrar un mensaje).
✅ Fácil de implementar en cualquier objeto recolectable.
🔹 1. Configurar el Objeto Recolectable
📌 Paso 1: Crear el Objeto en la Escena
- Ve a
GameObject > 3D Object > Cube (o Sphere)
para crear un objeto recolectable. - Renómbralo
ObjetoRecolectable
. - Cambia su color o textura para que se vea diferente.
📌 Paso 2: Agregar un Collider
para Detectar Colisiones
- Selecciona el
ObjetoRecolectable
en la Jerarquía. - Asegúrate de que tiene un
Collider
(BoxCollider
,SphereCollider
, etc.). - Marca
Is Trigger
en elCollider
✅ para que detecte cuando el jugador lo toca.
📌 Paso 3: Darle un Tag
al Jugador
- Selecciona el
Jugador
en la Jerarquía. - En el
Inspector
, asegúrate de que suTag
sea"Player"
.- Si
"Player"
no existe, agrégalo enAdd Tag > + Player
.
- Si
🔹 2. Crear el Script para Desaparecer el Objeto
📌 Paso 4: Crear el Script Recolectable.cs
- Ve a la carpeta
Scripts
(Assets/Scripts
). - Clic derecho > Create > C# Script.
- Nómbralo
Recolectable.cs
y ábrelo. - Pega este código:
using UnityEngine;
public class Recolectable : MonoBehaviour
{
private void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player")) // Verifica si el jugador tocó el objeto
{
Debug.Log("¡Objeto recogido!");
// Desactivar el objeto recolectable
gameObject.SetActive(false);
// Opcional: Sumar puntos al jugador o activar una animación
// GameManager.instance.SumarPuntos(10);
}
}
}
🔹 3. Conectar el Script al Objeto
📌 Paso 5: Asignar el Script al ObjetoRecolectable
- Selecciona el
ObjetoRecolectable
en la Jerarquía. - Añade el script
Recolectable.cs
(Add Component > Recolectable
).
🔹 4. Opcional: Destruir el Objeto en Lugar de Desactivarlo
Si en lugar de desactivar el objeto (SetActive(false)
) prefieres destruirlo completamente, cambia esta línea:
gameObject.SetActive(false);
Por esta otra:
Destroy(gameObject);
🔹 Diferencias:
SetActive(false)
: El objeto desaparece pero sigue en la escena (se puede volver a activar).Destroy(gameObject)
: El objeto se elimina completamente de la escena.
🎯 Resultado Final
✅ Cuando el jugador toca el objeto, este desaparece.
✅ Puede activarse una acción extra (sumar puntos o animación).
✅ Funciona tanto con SetActive(false)
como con Destroy()
.
🔥 ¡Pruébalo y dime si funciona! 🚀🎮
