Transiciones entre escenas en Unity con C#

Clase 16 de 60Curso Avanzado de Creación de RPGs con Unity

Resumen

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?