Cum să te teleportați între scene în Unity

Teleportarea între scene în Unity este o caracteristică utilă pentru tranziția jucătorilor între diferite niveluri sau zone. Acest tutorial acoperă cum să implementați teleportarea scenei folosind încărcarea aditivă a scenei, asigurând persistența datelor jucătorului și descărcarea scenei vechi după teleportare. Această abordare asigură o tranziție lină fără a pierde datele sau obiectele jucătorului.

Configurarea scenelor și a punctelor de teleportare

Mai întâi, vom configura scenele și vom desemna puncte de teleportare în ele.

Crearea scenelor

  1. În Unity, accesați Fișier > Scenă nouă pentru a crea o scenă nouă. Salvați-l în folderul dvs. Assets, numindu-l Scene1.
  2. Repetați procesul pentru a crea o altă scenă numită Scene2.
  3. Adăugați ambele scene la setările de construcție accesând Fișier > Setări de compilare și făcând clic pe Adăugați scene deschise.

Desemnarea punctelor de teleportare

Fiecare scenă are nevoie de un punct desemnat în care jucătorul va apărea după teleportare.

  1. În Scene1, creați un GameObject gol și denumiți-l TeleportPoint1. Etichetați-l corespunzător, de exemplu, ca SpawnPoint.
  2. În Scene2, creați un alt GameObject gol numit TeleportPoint2 și etichetați-l în mod similar.
  3. Aceste GameObjects vor servi ca locații de apariție la tranziția între scene.

Crearea unui script de teleportare

Scriptul de teleportare gestionează tranziția scenei, asigurându-se că jucătorul se deplasează în locația corectă în noua scenă și apoi descarcă scena anterioară.

Script de teleportare

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;
        }
    }
}
  1. Creați un nou script C# numit Teleportation.cs în folderul Scripts.
  2. Atașați acest script la un obiect care va acționa ca un declanșator de teleportare, cum ar fi o ușă sau un portal.
  3. Setați sceneToLoad la numele scenei la care să faceți tranziția și asigurați-vă că punctul de teleportare din noua scenă este etichetat corect.

Manevrarea datelor jucătorilor de-a lungul scenelor

Dacă jocul dvs. necesită menținerea datelor jucătorilor (cum ar fi inventarul, starea de sănătate etc.) între scene, implementați o strategie de persistență a datelor.

Date persistente ale jucătorului

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);
        }
    }
}
  1. Creați un nou script C# numit PlayerData.cs și atașați-l la obiectul player sau la un GameObject separat.
  2. Asigurați-vă că acest GameObject nu este distrus în timpul tranzițiilor scenei utilizând DontDestroyOnLoad(gameObject).

Concluzie

Teleportarea între scene în Unity, în special cu încărcarea și descărcarea aditivă a scenei, oferă o experiență perfectă. Această metodă reține obiecte importante de joc precum jucătorul și gestionează eficient resursele prin descărcarea scenei anterioare. O astfel de abordare este deosebit de utilă în jocurile cu medii mari sau continue. Personalizați în continuare această configurație pentru a se potrivi cerințelor specifice de joc, cum ar fi menținerea datelor de stare sau adăugarea de efecte vizuale în timpul tranzițiilor.