Aprende a crear una transición automática entre escenas en Unity con C#, usando una change zone con BoxCollider2D en modo trigger, un prefab reutilizable y ajustes en Build Settings. Además, verás cómo organizar capas (foreground, background, building) y el order in layer para un acabado limpio en exterior e interior. Domina un flujo simple, claro y eficaz sin añadir complejidad innecesaria.
¿Cómo diseñar escenas y capas para una transición limpia?
Organiza dos escenas: la exterior (con fachada, puerta, ventana, leña y porche) y el interior (suelo, mesa, sillas, cofres, luces y ventanas). La clave está en las capas y los colliders.
¿Qué capas y colliders se usan en el interior?
- Usa dos capas: fondo y frente.
- El frente tiene Tilemap Collider 2D activo.
- El fondo no tiene colisión.
- El suelo es una capa sin colisión.
- Objetos como mesas, sillas y cofres bloquean el paso.
¿Cómo resolver techo y fachada con order in layer?
- Crea una capa adicional tipo building para colocar el techo por encima de la fachada.
- Mantén fachada y techo en foreground, pero con distinto order in layer: el más al frente con valor más positivo.
- Truco visual: usa una fachada cuadrada y superpone puerta, ventana y tejado con order in layer para simular mitad techo y mitad fachada sin romper el tilemap.
¿Cómo crear la zona de cambio con collider y prefab?
El flujo de transición se basa en detectar la entrada del jugador a una zona invisible y cargar otra escena con SceneManagement.
- Crea un objeto vacío llamado Change Zone. Es invisible; añade un icono solo para ubicarlo.
- Asigna un BoxCollider2D y marca isTrigger para activar el cambio sin colisión física.
- Sitúa la zona justo antes de la puerta en el exterior.
- Asigna el script Go to new place a la Change Zone.
- Convierte la Change Zone en prefab para reutilizarla en cualquier escena.
¿Cómo configurar el script en C#?
Replica la lógica mínima: importar SceneManagement, exponer el nombre de la nueva escena y cargarla al entrar el Player en el trigger.
using UnityEngine;
using UnityEngine.SceneManagement;
public class GoToNewPlace : MonoBehaviour
{
public string newPlaceName = "new scene name here";
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
SceneManager.LoadScene(newPlaceName);
}
}
}
- Variable pública: newPlaceName editable desde el editor.
- Método: OnTriggerEnter2D detecta la entrada del Player por etiqueta.
- Acción: SceneManager.LoadScene(newPlaceName) ejecuta la transición.
¿Qué ajustes en Build Settings aseguran la carga?
- Abre Build Settings y añade ambas escenas con “Add Open Scenes”.
- Ordena para que Main Scene sea la primera y House Interior Scene la segunda.
- En la Change Zone del exterior, escribe en newPlaceName: "house interior scene".
- En el interior, coloca otra Change Zone en la salida y pon newPlaceName: "main scene".
¿Qué flujo de transición entre escenas se logra?
Al acercarte a la casa, el Player entra en la Change Zone y se carga la escena interior automáticamente. Desde el interior, otra Change Zone te devuelve al exterior. El resultado es una transición bidireccional simple y estable.
- Exterior: camina hasta la puerta, entra en la zona y cambia a interior.
- Interior: cruza la zona de salida y vuelve a la escena principal.
- Observa en la jerarquía: cámara y Player se recrean en cada transición al ser nuevas escenas. Se recomienda, más adelante, reutilizar una única instancia para todo el juego.
¿Te gustaría comentar cómo organizarías tus prefabs y capas para soportar más edificios o múltiples interiores?