Uso de Don'tDestroyOnLoad en Unity para Gestión de Objetos Persistentes

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

Resumen

¿Cómo evitar sobrecargar el sistema al cambiar de escena?

En el desarrollo de videojuegos, uno de los problemas comunes es la gestión eficiente de los objetos en distintas escenas. Si un jugador o una cámara se duplica cada vez que cambiamos de escena, esto puede llegar a ser problemático y complicado de manejar. Unity nos ofrece una solución a este problema a través de la técnica Don't Destroy On Load, la cual nos permite hacer que ciertos objetos permanezcan entre escenas sin ser destruidos.

¿Cómo implementar la técnica Don't Destroy On Load en Unity?

Para aplicar esta técnica, debemos seguir una serie de pasos claros y sencillos. Primero, identificamos los objetos que deben persistir entre escenas, como el jugador y su cámara. Luego, incorporamos una variable estática en el script del controlador del jugador para verificar si el jugador ya ha sido creado.

¿Qué pasos sigo para configurar el PlayerController?

  1. Definir una variable estática: en el script PlayerController, creamos una variable booleana estática, PlayerCreated, para verificar el estado de creación del jugador.

    public static bool PlayerCreated = false;

  2. Verificar en el método Start: en el método Start, decidimos si el jugador debe ser creado o no. Si PlayerCreated es false, indicamos que el jugador se ha creado y usamos Don't Destroy On Load.

    void Start() { if (!PlayerCreated) { PlayerCreated = true; DontDestroyOnLoad(this.transform.gameObject); } else { Destroy(gameObject); } }

¿Cómo aplico el script Don't Destroy On Load a la cámara?

Para asegurarnos de que la cámara, al igual que el jugador, no se destruya al cambiar de escena, creamos un script específico y lo aplicamos al objeto de cámara principal.

  1. Creación del script: creamos un script llamado DontDestroyOnLoad.

    using UnityEngine;

    public class DontDestroyOnLoad : MonoBehaviour { void Start() { if (!PlayerController.PlayerCreated) { DontDestroyOnLoad(this.transform.gameObject); } else { Destroy(gameObject); } } }

  2. Asignación a la cámara: este script debe asignarse al prefab de la cámara principal para asegurar que persista a través de todas las escenas.

¿Cómo gestiono el teletransporte entre escenas?

Aunque hemos resuelto el problema de duplicación, ahora enfrentamos un nuevo desafío: la sincronización. Al cambiar de escena, es importante que los objetos se ubiquen en la posición adecuada, especialmente si existe un mecanismo de teletransporte.

  • Uso de puntos de spawn: debes definir puntos de spawn en las escenas de destino que correspondan a los puntos de teletransporte de la escena actual.

La técnica de Don't Destroy On Load es crucial para evitar el sobrecargado de personajes y cámaras, optimizando el rendimiento del juego al prevenir cargas innecesarias. Ahora puedes centrarte en la sincronización correcta de los objetos entre escenas, usando puntos clave de referencia para el teletransporte de tus personajes. ¡Continúa experimentando y desarrollando tus habilidades con Unity!