Cómo teletransportarse entre escenas en Unity
La teletransportación entre escenas en Unity es una característica útil para la transición de jugadores entre diferentes niveles o áreas. Este tutorial explica cómo implementar la teletransportación de escenas mediante la carga aditiva de escenas, lo que garantiza la persistencia de los datos del jugador y la descarga de la escena anterior después de la teletransportación. Este enfoque garantiza una transición fluida sin perder datos ni objetos del jugador.
Configuración de escenas y puntos de teletransportación
Primero, configuraremos las escenas y designaremos puntos de teletransportación dentro de ellas.
Creando escenas
- En Unity, ve a 
Archivo > Nueva escenapara crear una nueva escena. Guárdala en tu carpetaRecursosy nómbralaEscena1. - Repita el proceso para crear otra escena llamada 
Escena2. - Agregue ambas escenas a la configuración de compilación yendo a 
Archivo > Configuración de compilacióny haciendo clic enAgregar escenas abiertas. 
Designación de puntos de teletransportación
Cada escena necesita un punto designado donde aparecerá el jugador después de la teletransportación.
- En 
Scene1, crea un GameObject vacío y nómbraloTeleportPoint1. Etiquétalo de forma adecuada, por ejemplo, comoSpawnPoint. - En 
Scene2, crea otro GameObject vacío llamadoTeleportPoint2y etiquétalo de manera similar. - Estos GameObjects servirán como lugares de aparición durante la transición entre escenas.
 
Creando un script de teletransportación
El script de teletransportación gestiona la transición de escena, garantizando que el jugador se mueva a la ubicación correcta en la nueva escena y luego descargue la escena anterior.
Guión de teletransportación
using UnityEngine;
using UnityEngine.SceneManagement;
public class Teleportation : MonoBehaviour
{
    public string sceneToLoad; // Name of the scene to load
    public string spawnPointTag = "SpawnPoint"; // Tag for identifying the spawn point
    private string currentSceneName; // To track the current scene
    void Start()
    {
        currentSceneName = SceneManager.GetActiveScene().name;
    }
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            DontDestroyOnLoad(other.gameObject); // Prevent player object from being destroyed
            SceneManager.LoadScene(sceneToLoad, LoadSceneMode.Additive); // Load new scene additively
            SceneManager.sceneLoaded += OnSceneLoaded; // Register callback for scene load completion
        }
    }
    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        if (scene.name == sceneToLoad)
        {
            // Find the spawn point in the newly loaded scene
            GameObject spawnPoint = GameObject.FindWithTag(spawnPointTag);
            if (spawnPoint != null)
            {
                GameObject player = GameObject.FindWithTag("Player");
                if (player != null)
                {
                    // Teleport the player to the spawn point
                    player.transform.position = spawnPoint.transform.position;
                }
            }
            // Unload the previous scene
            SceneManager.UnloadSceneAsync(currentSceneName);
            // Update the current scene name and unregister the event handler
            currentSceneName = sceneToLoad;
            SceneManager.sceneLoaded -= OnSceneLoaded;
        }
    }
}- Cree un nuevo script de C# llamado 
Teleportation.csen la carpetaScripts. - Adjunte este script a un objeto que actuará como disparador de teletransporte, como una puerta o un portal.
 - Establezca 
sceneToLoaden el nombre de la escena a la que se realizará la transición y asegúrese de que el punto de teletransportación en la nueva escena esté etiquetado correctamente. 
Manejo de datos de jugadores en distintas escenas
Si su juego requiere mantener datos de los jugadores (como inventario, salud, etc.) en todas las escenas, implemente una estrategia de persistencia de datos.
Datos persistentes de jugadores
using UnityEngine;
public class PlayerData : MonoBehaviour
{
    public static PlayerData instance;
    public int health = 100;
    void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}- Cree un nuevo script de C# llamado 
PlayerData.csy adjúntelo al objeto de jugador o a un GameObject separado. - Asegúrese de que este GameObject no se destruya durante las transiciones de escena utilizando 
DontDestroyOnLoad(gameObject). 
Conclusión
La teletransportación entre escenas en Unity, especialmente con carga y descarga de escenas aditivas, proporciona una experiencia fluida. Este método conserva objetos importantes del juego, como el jugador, y administra los recursos de manera eficiente al descargar la escena anterior. Este enfoque es particularmente útil en juegos con entornos grandes o continuos. Personaliza aún más esta configuración para que se adapte a los requisitos específicos del juego, como mantener los datos de estado o agregar efectos visuales durante las transiciones.