Hur man teleporterar mellan scener i Unity
Teleportering mellan scener i Unity är en användbar funktion för att flytta spelare mellan olika nivåer eller områden. Denna handledning tar upp hur man implementerar scenteleportering med hjälp av additiv scenladdning, säkerställer spelardatabeständighet och avlastning av den gamla scenen efter teleporteringen. Detta tillvägagångssätt säkerställer en smidig övergång utan att förlora spelardata eller objekt.
Ställa in scener och teleporteringspunkter
Först kommer vi att ställa in scenerna och utse teleporteringspunkter inom dem.
Skapa scener
- I Unity, gå till
File > New Scene
för att skapa en ny scen. Spara den i mappenAssets
och döp den tillScene1
. - Upprepa processen för att skapa en annan scen med namnet
Scene2
. - Lägg till båda scenerna till bygginställningarna genom att gå till
Arkiv > Bygginställningar
och klicka påLägg till öppna scener
.
Utse teleporteringspunkter
Varje scen behöver en angiven punkt där spelaren kommer att dyka upp efter teleportering.
- I
Scene1
, skapa ett tomt GameObject och döp det tillTeleportPoint1
. Tagga det på lämpligt sätt, till exempel somSpawnPoint
. - I
Scene2
, skapa ett annat tomt GameObject med namnetTeleportPoint2
och tagga det på liknande sätt. - Dessa GameObjects kommer att fungera som spawn-platser vid övergång mellan scener.
Skapa ett teleporteringsskript
Teleporteringsskriptet hanterar scenövergången, säkerställer att spelaren flyttar till rätt plats i den nya scenen, och laddar sedan ur den föregående scenen.
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;
}
}
}
- Skapa ett nytt C#-skript med namnet
Teleportation.cs
i mappenScripts
. - Bifoga det här skriptet till ett objekt som kommer att fungera som en teleportutlösare, till exempel en dörr eller portal.
- Ställ in
sceneToLoad
till namnet på scenen att övergå till och se till att teleporteringspunkten i den nya scenen är korrekt taggad.
Hantera spelardata över scener
Om ditt spel kräver underhåll av spelardata (som inventering, hälsa, etc.) över scener, implementera en databeständighetsstrategi.
Persistent spelardata
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);
}
}
}
- Skapa ett nytt C#-skript med namnet
PlayerData.cs
och bifoga det till spelarobjektet eller ett separat GameObject. - Se till att detta GameObject inte förstörs under scenövergångar genom att använda
DontDestroyOnLoad(gameObject)
.
Slutsats
Teleportering mellan scener i Unity, särskilt med additiv scenladdning och urladdning, ger en sömlös upplevelse. Den här metoden behåller viktiga spelobjekt som spelaren och hanterar resurser effektivt genom att ta bort den föregående scenen. Ett sådant tillvägagångssätt är särskilt användbart i spel med stora eller kontinuerliga miljöer. Anpassa den här inställningen ytterligare för att passa specifika spelkrav, som att underhålla tillståndsdata eller lägga till visuella effekter under övergångar.