Capítulo 5: ¡Añadiendo un Objetivo Simple – Introducción a los Triggers y la Carga de Escenas!
En los capítulos anteriores, logramos mover nuestro cubo e incluso hacer que el plano cambiara de color al contacto. ¡Ahora es el momento de darle un propósito a todo esto! En este capítulo, aprenderemos sobre los Triggers, que son áreas que detectan colisiones sin generar una respuesta física, y cómo podemos usar la carga de escenas para simular la consecución de un objetivo.
Paso 1: Creando un GameObject para el Objetivo
Vamos a crear un nuevo objeto que actuará como nuestro objetivo. Podría ser otro cubo de un color diferente.
- Ve a la ventana de Jerarquía.
- Haz clic derecho en cualquier espacio vacío, selecciona “3D Object” y luego haz clic en “Cube“.
- Selecciona el nuevo “Cube” en la ventana de Jerarquía y cámbiale el nombre a “Objetivo“.
- En la ventana de Inspector, ajusta su Position para que esté en algún lugar diferente del plano inicial (por ejemplo, (0, 1, 5)).
- También puedes cambiar su Scale si lo deseas (por ejemplo, (0.5, 0.5, 0.5) para hacerlo más pequeño).
- Crea un nuevo Material en la ventana de Proyecto (clic derecho -> Crear -> Material) y nómbralo “MaterialObjetivo”. Elige un color diferente y llamativo para este material (por ejemplo, verde) y aplícalo al GameObject “Objetivo” arrastrándolo al componente Mesh Renderer en el Inspector del Objetivo.
Paso 2: Convirtiendo el Objetivo en un Trigger
Queremos que cuando nuestro cubo toque el objetivo, no haya una colisión física que lo detenga, sino que se detecte el evento y se cargue una nueva escena. Para esto, convertiremos el Collider del objetivo en un Trigger.
- Selecciona el GameObject “Objetivo” en la ventana de Jerarquía.
- En la ventana de Inspector, busca el componente “Box Collider” (o el Collider que tenga el Objetivo).
- Marca la casilla “Is Trigger“. Al hacer esto, el Collider actuará como un área de detección de eventos en lugar de una barrera física.
Paso 3: Creando una Nueva Escena para el Objetivo Cumplido
Necesitamos una nueva escena que se cargue cuando alcancemos el objetivo.
- Ve al menú “File” en la parte superior de la interfaz de Unity.
- Haz clic en “New Scene”.
- Se creará una nueva escena vacía. Puedes añadir algunos elementos visuales a esta escena si lo deseas (por ejemplo, un TextMeshPro para mostrar el mensaje “¡Objetivo Cumplido!”). Para añadir un texto simple:
- Haz clic derecho en la ventana de Jerarquía, selecciona “3D Object” -> “Text – TextMeshPro”.
- En el Inspector del objeto “Text (TMP)”, cambia el texto en el campo “Text (TMP)” a “¡Objetivo Cumplido!”.
- Ajusta su Position, Rotation y Scale para que sea visible en la escena. También puedes cambiar su color y tamaño en las propiedades del TextMeshPro.
- Guarda esta nueva escena (menú “File” -> “Save As”) y nómbrala “EscenaObjetivoCumplido” dentro de la carpeta “Assets” de tu proyecto.
Paso 4: Creando un Script para Detectar el Trigger y Cargar la Escena
Ahora, vamos a crear un nuevo script que adjuntaremos a nuestro cubo. Este script detectará cuando el cubo entra en el área del Trigger del objetivo y cargará la nueva escena.
- Ve a la ventana de Proyecto.
- Haz clic derecho en cualquier espacio vacío, selecciona “Crear” y luego “C# Script“.
- Nombra este script “AlcanzarObjetivo” y haz doble clic para abrirlo en tu editor de código.
Paso 5: Escribiendo el Código para Detectar el Trigger y Cargar la Escena
Reemplaza el contenido del script “AlcanzarObjetivo.cs” con el siguiente código:
using UnityEngine;
using UnityEngine.SceneManagement; // Necesitamos este namespace para cargar escenas
public class AlcanzarObjetivo : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
// Este método se llama cuando otro Collider entra en el Trigger de este GameObject.
// Verificar si el GameObject que entró en el trigger es nuestro Objetivo
if (other.gameObject.name == "Objetivo")
{
Debug.Log("¡Objetivo alcanzado!");
// Cargar la escena "EscenaObjetivoCumplido"
SceneManager.LoadScene("EscenaObjetivoCumplido");
}
}
}
- Guarda el script.
Explicación del Código:
- using UnityEngine.SceneManagement;: Importamos el namespace UnityEngine.SceneManagement, que contiene la función SceneManager.LoadScene() para cargar diferentes escenas.
- void OnTriggerEnter(Collider other): Esta es una función especial de Unity que se llama automáticamente cuando otro Collider entra en el área de un Collider que tiene la propiedad “Is Trigger” activada (como nuestro Objetivo). El parámetro Collider other nos da información sobre el Collider que entró en el trigger.
- if (other.gameObject.name == “Objetivo”): Verificamos si el nombre del GameObject que entró en el trigger es “Objetivo”.
- Debug.Log(“¡Objetivo alcanzado!”);: Mostramos un mensaje en la Consola cuando se alcanza el objetivo.
- SceneManager.LoadScene(“EscenaObjetivoCumplido”);: Esta línea carga la escena llamada “EscenaObjetivoCumplido”. Es crucial que el nombre de la escena coincida exactamente con el nombre del archivo de la escena (sin la extensión .unity).
Paso 6: Adjuntando el Script al Cubo
Queremos que el cubo sea el que detecte cuándo entra en el trigger del objetivo, así que adjuntaremos este script al cubo.
- Selecciona el GameObject “Cube” en la ventana de Jerarquía.
- Arrastra el script “AlcanzarObjetivo.cs” desde la ventana de Proyecto hasta la ventana de Inspector del Cubo (justo debajo de los otros scripts).
Paso 7: ¡Añadiendo la Escena al Build Settings!
Antes de que Unity pueda cargar nuestras escenas, necesitamos añadirlas al Build Settings.
- Ve al menú “File” en la parte superior de la interfaz de Unity.
- Haz clic en “Build Settings”.
- En la ventana de Build Settings, arrastra las dos escenas de tu proyecto (la escena inicial donde está el cubo y el plano, y la escena “EscenaObjetivoCumplido”) desde la ventana de Proyecto hasta la lista “Scenes In Build“. Asegúrate de que la escena inicial esté en la parte superior (índice 0) y la escena del objetivo cumplido esté debajo (índice 1).
Paso 8: ¡Probando Nuestro Objetivo!
- Asegúrate de que el cubo esté inicialmente en la escena principal.
- Haz clic en el botón de “Play” en la Barra de Herramientas.
- Utiliza las teclas de movimiento para mover el cubo hacia el GameObject “Objetivo”.
- Cuando el cubo entre en el área del trigger del objetivo (puede que no veas ningún cambio visual inmediato al entrar, ya que es un trigger), deberías ver el mensaje “¡Objetivo alcanzado!” en la ventana de Consola y ¡la escena debería cambiar a “EscenaObjetivoCumplido”!
¡Felicidades! Has completado la base de un juego simple en Unity. Has aprendido sobre Triggers, cómo detectar la entrada en un trigger y cómo cargar una nueva escena.
¡Con estos fundamentos, puedes empezar a expandir tu juego con más mecánicas, objetos y desafíos!