Jak teleportować się między scenami w Unity
Teleportacja między scenami w Unity to przydatna funkcja do przenoszenia graczy między różnymi poziomami lub obszarami. Ten samouczek opisuje, jak zaimplementować teleportację sceny za pomocą addytywnego ładowania sceny, zapewniając trwałość danych gracza i rozładowując starą scenę po teleportacji. Takie podejście zapewnia płynne przejście bez utraty danych gracza lub obiektów.
Konfigurowanie scen i punktów teleportacji
Najpierw przygotujemy sceny i wyznaczymy w nich punkty teleportacji.
Tworzenie scen
- W Unity przejdź do
Plik > Nowa scena
, aby utworzyć nową scenę. Zapisz ją w folderzeAssets
, nadając mu nazwęScene1
. - Powtórz ten proces, aby utworzyć inną scenę o nazwie
Scene2
. - Dodaj obie sceny do ustawień kompilacji, przechodząc do
Plik > Ustawienia kompilacji
i klikającDodaj otwarte sceny
.
Wyznaczanie punktów teleportacji
Każda scena wymaga wyznaczonego punktu, w którym gracz pojawi się po teleportacji.
- W
Scene1
utwórz pusty GameObject i nazwij goTeleportPoint1
. Oznacz go odpowiednio, na przykład jakoSpawnPoint
. - W
Scene2
utwórz kolejny pusty obiekt GameObject o nazwieTeleportPoint2
i oznacz go podobnie. - Te obiekty gry będą służyć jako miejsca odradzania się podczas przechodzenia między scenami.
Tworzenie skryptu teleportacji
Skrypt teleportacji zarządza przejściem między scenami, zapewniając, że gracz przeniesie się do właściwego miejsca w nowej scenie, a następnie wyłączy poprzednią scenę.
Skrypt teleportacji
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;
}
}
}
- Utwórz nowy skrypt C# o nazwie
Teleportation.cs
w folderzeScripts
. - Dołącz ten skrypt do obiektu, który będzie działał jako wyzwalacz teleportu, np. drzwi lub portal.
- Ustaw
sceneToLoad
na nazwę sceny, do której chcesz przejść, i upewnij się, że punkt teleportacji w nowej scenie jest prawidłowo oznaczony.
Obsługa danych gracza w różnych scenach
Jeśli Twoja gra wymaga przechowywania danych gracza (takich jak ekwipunek, zdrowie itp.) na różnych scenach, wdróż strategię trwałości danych.
Trwałe dane gracza
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);
}
}
}
- Utwórz nowy skrypt C# o nazwie
PlayerData.cs
i dołącz go do obiektu gracza lub oddzielnego obiektu GameObject. - Upewnij się, że ten GameObject nie zostanie zniszczony podczas przejść między scenami, używając polecenia
DontDestroyOnLoad(gameObject)
.
Wniosek
Teleportacja między scenami w Unity, zwłaszcza z dodatkowym ładowaniem i rozładowywaniem scen, zapewnia płynne działanie. Ta metoda zachowuje ważne obiekty gry, takie jak gracz, i efektywnie zarządza zasobami, rozładowując poprzednią scenę. Takie podejście jest szczególnie przydatne w grach z dużymi lub ciągłymi środowiskami. Dostosuj tę konfigurację dalej, aby odpowiadała konkretnym wymaganiom rozgrywki, takim jak utrzymywanie danych stanu lub dodawanie efektów wizualnych podczas przejść.