Hvordan teleportere mellom scener i enhet
Teleportering mellom scener i Unity er en nyttig funksjon for å flytte spillere mellom forskjellige nivåer eller områder. Denne opplæringen dekker hvordan du implementerer sceneteleportering ved å bruke additiv scenelasting, sikrer spillerdatapersistens og laster ut den gamle scenen etter teleporteringen. Denne tilnærmingen sikrer en jevn overgang uten å miste spillerdata eller gjenstander.
Sette opp scener og teleporteringspunkter
Først setter vi opp scenene og utpeker teleporteringspunkter i dem.
Opprette scener
- I Unity, gå til
Fil > Ny scene
for å lage en ny scene. Lagre den i mappenAssets
, og gi den navnetScene1
. - Gjenta prosessen for å lage en annen scene kalt
Scene2
. - Legg til begge scenene til byggeinnstillingene ved å gå til
Fil > Bygginnstillinger
og klikkeLegg til åpne scener
.
Utpeke teleporteringspunkter
Hver scene trenger et bestemt punkt hvor spilleren vil vises etter teleportering.
- I
Scene1
oppretter du et tomt GameObject og gir det navnetTeleportPoint1
. Merk den på riktig måte, for eksempel somSpawnPoint
. - I
Scene2
, lag et annet tomt GameObject kaltTeleportPoint2
og merk det på samme måte. - Disse GameObjects vil fungere som spawn-plasseringer når du går mellom scener.
Opprette et teleporteringsskript
Teleporteringsskriptet styrer sceneovergangen, og sikrer at spilleren beveger seg til riktig plassering i den nye scenen, og laster deretter ut den forrige scenen.
Teleporteringsskript
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;
}
}
}
- Lag et nytt C#-skript med navnet
Teleportation.cs
i mappenScripts
. - Fest dette skriptet til et objekt som vil fungere som en teleportutløser, for eksempel en dør eller portal.
- Sett
sceneToLoad
til navnet på scenen som skal overføres til, og sørg for at teleporteringspunktet i den nye scenen er riktig merket.
Håndtering av spillerdata på tvers av scener
Hvis spillet ditt krever vedlikehold av spillerdata (som inventar, helse osv.) på tvers av scener, implementer en strategi for datautholdenhet.
Vedvarende 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);
}
}
}
- Lag et nytt C#-skript kalt
PlayerData.cs
og fest det til spillerobjektet eller et separat GameObject. - Sørg for at dette GameObject ikke blir ødelagt under sceneoverganger ved å bruke
DontDestroyOnLoad(gameObject)
.
Konklusjon
Teleportering mellom scener i Unity, spesielt med additiv scenelasting og lossing, gir en sømløs opplevelse. Denne metoden beholder viktige spillobjekter som spilleren og administrerer ressurser effektivt ved å tømme den forrige scenen. En slik tilnærming er spesielt nyttig i spill med store eller kontinuerlige miljøer. Tilpass dette oppsettet ytterligere for å passe spesifikke spillkrav, som å opprettholde tilstandsdata eller legge til visuelle effekter under overganger.