So teleportieren Sie in Unity zwischen Szenen
Das Teleportieren zwischen Szenen in Unity ist eine nützliche Funktion für den Wechsel von Spielern zwischen verschiedenen Levels oder Bereichen. Dieses Tutorial beschreibt, wie man Szenenteleportation durch additives Laden von Szenen implementiert, die Persistenz der Spielerdaten sicherstellt und die alte Szene nach der Teleportation entlädt. Dieser Ansatz gewährleistet einen reibungslosen Übergang ohne Verlust von Spielerdaten oder -objekten.
Einrichten von Szenen und Teleportationspunkten
Zuerst richten wir die Szenen ein und legen darin Teleportationspunkte fest.
Szenen erstellen
- Gehen Sie in Unity zu
Datei > Neue Szene
, um eine neue Szene zu erstellen. Speichern Sie sie in Ihrem OrdnerAssets
und nennen Sie sieSzene1
. - Wiederholen Sie den Vorgang, um eine weitere Szene mit dem Namen
Szene2
zu erstellen. - Fügen Sie beide Szenen zu den Build-Einstellungen hinzu, indem Sie zu
Datei > Build-Einstellungen
gehen und aufOffene Szenen hinzufügen
klicken.
Festlegen von Teleportationspunkten
Jede Szene benötigt einen bestimmten Punkt, an dem der Spieler nach der Teleportation erscheint.
- Erstellen Sie in
Scene1
ein leeres GameObject und nennen Sie esTeleportPoint1
. Kennzeichnen Sie es entsprechend, zum Beispiel alsSpawnPoint
. - Erstellen Sie in
Scene2
ein weiteres leeres GameObject mit dem NamenTeleportPoint2
und kennzeichnen Sie es auf ähnliche Weise. - Diese GameObjects dienen beim Übergang zwischen Szenen als Spawn-Standorte.
Erstellen eines Teleportationsskripts
Das Teleportationsskript verwaltet den Szenenübergang, stellt sicher, dass der Spieler an die richtige Stelle in der neuen Szene wechselt, und lädt dann die vorherige Szene herunter.
Teleportationsskript
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;
}
}
}
- Erstellen Sie ein neues C#-Skript mit dem Namen
Teleportation.cs
im OrdnerScripts
. - Hängen Sie dieses Skript an ein Objekt an, das als Teleportauslöser fungiert, beispielsweise eine Tür oder ein Portal.
- Setzen Sie
sceneToLoad
auf den Namen der Szene, zu der gewechselt werden soll, und stellen Sie sicher, dass der Teleportationspunkt in der neuen Szene richtig markiert ist.
Szenenübergreifender Umgang mit Spielerdaten
Wenn Ihr Spiel die Verwaltung von Spielerdaten (wie Inventar, Gesundheit usw.) über mehrere Szenen hinweg erfordert, implementieren Sie eine Strategie zur Datenpersistenz.
Dauerhafte Spielerdaten
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);
}
}
}
- Erstellen Sie ein neues C#-Skript mit dem Namen
PlayerData.cs
und hängen Sie es an das Player-Objekt oder ein separates GameObject an. - Stellen Sie mit
DontDestroyOnLoad(gameObject)
sicher, dass dieses GameObject während Szenenübergängen nicht zerstört wird.
Abschluss
Das Teleportieren zwischen Szenen in Unity, insbesondere mit additivem Laden und Entladen von Szenen, bietet ein nahtloses Erlebnis. Diese Methode behält wichtige Spielobjekte wie den Spieler bei und verwaltet Ressourcen effizient, indem die vorherige Szene entladen wird. Ein solcher Ansatz ist insbesondere in Spielen mit großen oder kontinuierlichen Umgebungen nützlich. Passen Sie dieses Setup weiter an, um es an bestimmte Gameplay-Anforderungen anzupassen, z. B. das Beibehalten von Statusdaten oder das Hinzufügen visueller Effekte während Übergängen.