Sådan teleporteres mellem scener i enhed
Teleportering mellem scener i Unity er en nyttig funktion til at flytte spillere mellem forskellige niveauer eller områder. Denne vejledning dækker, hvordan man implementerer sceneteleportering ved hjælp af additiv sceneindlæsning, sikring af spillerdatapersistens og aflæsning af den gamle scene efter teleporteringen. Denne tilgang sikrer en glidende overgang uden at miste spillerdata eller objekter.
Opsætning af scener og teleporteringspunkter
Først sætter vi scenerne op og udpeger teleporteringspunkter i dem.
Oprettelse af scener
- I Unity skal du gå til
File > New Scene
for at oprette en ny scene. Gem den i dinAssets
-mappe, og giv den navnetScene1
. - Gentag processen for at oprette en anden scene ved navn
Scene2
. - Tilføj begge scener til byggeindstillingerne ved at gå til
Filer > Byg indstillinger
og klikke påTilføj åbne scener
.
Udpegning af teleportationspunkter
Hver scene har brug for et udpeget punkt, hvor spilleren vises efter teleportering.
- I
Scene1
skal du oprette et tomt GameObject og navngive detTeleportPoint1
. Tag det passende, for eksempel somSpawnPoint
. - I
Scene2
skal du oprette et andet tomt GameObject ved navnTeleportPoint2
og tagge det på samme måde. - Disse GameObjects vil fungere som spawn-lokationer, når de skifter mellem scener.
Oprettelse af et teleportationsscript
Teleporteringsscriptet styrer sceneovergangen, og sikrer, at spilleren flytter til den korrekte placering i den nye scene, og aflæser derefter den forrige scene.
Teleportation Script
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;
}
}
}
- Opret et nyt C#-script ved navn
Teleportation.cs
i mappenScripts
. - Vedhæft dette script til et objekt, der vil fungere som en teleportudløser, såsom en dør eller portal.
- Indstil
sceneToLoad
til navnet på den scene, der skal skiftes til, og sørg for, at teleporteringspunktet i den nye scene er mærket korrekt.
Håndtering af spillerdata på tværs af scener
Hvis dit spil kræver at vedligeholde spillerdata (såsom inventar, sundhed osv.) på tværs af scener, skal du implementere en datapersistensstrategi.
Persistent spillerdata
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);
}
}
}
- Opret et nyt C#-script ved navn
PlayerData.cs
og vedhæft det til afspillerobjektet eller et separat GameObject. - Sørg for, at dette GameObject ikke ødelægges under sceneovergange ved at bruge
DontDestroyOnLoad(gameObject)
.
Konklusion
Teleportering mellem scener i Unity, især med additiv sceneindlæsning og aflæsning, giver en problemfri oplevelse. Denne metode bevarer vigtige spilobjekter som spilleren og styrer ressourcer effektivt ved at aflæse den forrige scene. En sådan tilgang er især nyttig i spil med store eller kontinuerlige miljøer. Tilpas denne opsætning yderligere, så den passer til specifikke gameplay-krav, såsom vedligeholdelse af tilstandsdata eller tilføjelse af visuelle effekter under overgange.