Spawn Zone: sincronizar entrada entre escenas

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

Contenido del curso

Personaje principal: Movimiento y Animaciones

Enemigos Avanzados

Personaje principal avanzado

Resumen

Optimiza las transiciones entre escenas en Unity con un sistema de spawn preciso, cámara alineada y control de dirección de mirada. Aquí verás cómo crear una Spawn Zone, evitar bucles por colliders solapados, resolver duplicados por Don't Destroy on Load y fijar la facing direction del personaje con C#.

¿Cómo sincronizar el spawn entre escenas en Unity?

Para que el personaje aparezca en el punto correcto al cambiar de escena, crea una Spawn Zone y posiciona allí al jugador y la cámara. La clave: usar referencias a un único PlayerController y CameraFollow que persisten con Don't Destroy on Load.

  • Crea un GameObject vacío llamado Spawn Zone. Añade un indicador visual para colocarlo con precisión.
  • Evita solaparlo con la Change Zone. Si se superponen los colliders, se crea un bucle de escenas.
  • Crea un script C# llamado SpawnZone y asígnalo al GameObject.
  • Reposiciona jugador y cámara en Start, ajustando la Z de la cámara a su valor habitual (por ejemplo, -10).
  • Elimina Update si no lo usas: solo actuará al cargar la escena.

¿Qué objetos y prefabs necesitas?

  • Un GameObject vacío para la Spawn Zone.
  • La Change Zone ya existente para el intercambio de escenas.
  • Un prefab de Spawn Zone para reutilizar en varias escenas.

¿Qué hace el script Spawn Zone?

  • Busca instancias únicas de jugador y cámara con FindObjectOfType.
  • Mueve ambos a la posición de la Spawn Zone.
  • Mantiene la Z de la cámara y ajusta X e Y al punto de spawn.
using UnityEngine; public class SpawnZone : MonoBehaviour { private PlayerController thePlayer; private CameraFollow theCamera; public Vector2 facingDirection = Vector2.zero; // Dirección deseada al entrar. void Start() { thePlayer = FindObjectOfType<PlayerController>(); theCamera = FindObjectOfType<CameraFollow>(); if (thePlayer != null) { thePlayer.transform.position = transform.position; } if (theCamera != null) { Vector3 camPos = theCamera.transform.position; theCamera.transform.position = new Vector3(transform.position.x, transform.position.y, camPos.z); } // Conservar dirección de mirada al entrar. if (thePlayer != null) { thePlayer.lastMovement = facingDirection; } } }

¿Cómo evitar bucles entre colliders?

  • No coloques la Spawn Zone encima de la Change Zone.
  • Si el collider de Change Zone llega demasiado lejos, reduce su área o desplaza la Spawn Zone hacia fuera.
  • Compila y prueba moviendo ambos hasta que no se re-dispare el cambio de escena.

¿Cómo alinear cámara y jugador al entrar a la nueva escena?

El jugador y la cámara deben existir una sola vez. Si en escenas secundarias quedaron copias, aparecerán duplicados y se comportarán de forma impredecible.

  • Usa un único PlayerController y CameraFollow con Don't Destroy on Load.
  • Elimina de las escenas destino cualquier copia del jugador o la cámara en la jerarquía.
  • Revisa que el script de Spawn Zone posicione a ambos correctamente al cargar.

¿Por qué usar FindObjectOfType en Start?

  • Solo hay una instancia de cada componente por diseño.
  • FindObjectOfType encuentra la referencia activa en la jerarquía.
  • Evita null y simplifica el setup del spawn.

¿Cómo corregir duplicados por Don't Destroy on Load?

  • Abre la escena de destino y borra el jugador y la cámara locales.
  • Guarda la escena y prueba la transición desde la escena principal.
  • Verifica que el personaje aparece en el punto de spawn y la cámara acompaña.

¿Cómo conservar la dirección de mirada con facing direction?

Entrar mirando en la dirección equivocada rompe la continuidad. Define una facing direction en cada Spawn Zone y asígnala al campo de movimiento del personaje.

  • Añade en SpawnZone: public Vector2 facingDirection = Vector2.zero.
  • Tras reposicionar, asigna: thePlayer.lastMovement = facingDirection.
  • Configura en el Inspector combinaciones de 0, 1 y -1: por ejemplo, (0, 1) para mirar hacia arriba.

¿Cómo configurar el Vector2 facingDirection?

  • Arriba: (0, 1).
  • Abajo: (0, -1).
  • Izquierda: (-1, 0).
  • Derecha: (1, 0).
  • Úsalo de forma coherente con el grafo del Animator.

¿Cómo preparar entradas y salidas múltiples con change zone?

  • Coloca varias Spawn Zone donde necesites instanciar al personaje.
  • Crea Change Zone en puertas, escaleras u otras salidas.
  • En cada Change Zone, especifica el nombre de la escena destino.
  • Asegúrate de que Spawn Zone y Change Zone no se solapan.

¿Te gustaría que revisemos tu configuración de Spawn Zone y facing direction? Comparte dudas y ejemplos en los comentarios.

      Spawn Zone: sincronizar entrada entre escenas