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.
usingUnityEngine;usingUnityEngine.SceneManagement;publicclassGoToNewPlace:MonoBehaviour{publicstring newPlaceName ="new scene name here";privatevoidOnTriggerEnter2D(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?
Bueno despues de Googlear un poco, para arreglar lo de las lineas azules (ya que no se explica en el curso) hay que:
1- Crear un sprite atlas (create/2D/SpriteAtlas)
2- A ese sprite Atlas le agregan el atlas con el que creamos los tiles en la opcion Objects for Packing (simplemente arrastrando)
3- Luego hay que poner filter mode en Point y compression None así mantiene el estilo pixel art.
En la preview sigue apareciendo, pero al darle Play desaparecen las lineas.
como se hace la transición pero dando un click???
pero que sea con el teclado ?
Agregas un && en la condicion que genera la transicion, pues esto hara que ademas de que el personaje se encuentre en el punto de transicion, tambien cumpla otra condicion, en este caso apretar la tecla que deseas.
Esta es la condicion que agregarias:
Estaría bueno saber. Como se resuelve el problema de las lineas azules. El profesor dice que es por la versión de Unity pero no se ve como lo resuelve. Y en la clase siguiente ya está resuelto
Es mejor usar
//En OnTriggercollision.CompareTag("Player")//Y en OnCollisioncollider.gameObject.CompareTag("Player")
Gente les dejo el código, para que nadie más sufra como yo un día buscando el error y puse el nombre "2D" con minúscula y no corría para nada. :(
.
using System.Collections;using System.Collections.Generic;using System.Diagnostics;using UnityEngine;using UnityEngine.SceneManagement;publicclassGoToNewPlace:MonoBehaviour{public string newPlaceName ="New Scene Name Here";privatevoidOnTriggerEnter2D(Collider2D collision){if(collision.gameObject.tag.Equals("Player")){SceneManager.LoadScene(newPlaceName);}}}