Hoe je tussen scènes in Unity kunt teleporteren
Teleporteren tussen scènes in Unity is een handige functie voor het overbrengen van spelers tussen verschillende niveaus of gebieden. Deze tutorial behandelt hoe u scèneteleportatie implementeert met behulp van additief scèneladen, het garanderen van de persistentie van spelergegevens en het ontladen van de oude scène na de teleportatie. Deze aanpak zorgt voor een soepele overgang zonder verlies van spelergegevens of objecten.
Scènes en teleportatiepunten instellen
Eerst richten we de scènes in en wijzen we de teleportatiepunten erin aan.
Scènes creëren
- Ga in Unity naar
Bestand > Nieuwe scène
om een nieuwe scène te maken. Sla deze op in je mapAssets
en noem dezeScene1
. - Herhaal het proces om nog een scène te maken met de naam
Scene2
. - Voeg beide scènes toe aan de build-instellingen door naar
Bestand > Build-instellingen
te gaan en te klikken opOpen scènes toevoegen
.
Teleportatiepunten aanwijzen
Voor elke scène is een specifiek punt nodig waar de speler na teleportatie verschijnt.
- Maak in
Scene1
een leeg GameObject en noem hetTeleportPoint1
. Tag het op de juiste manier, bijvoorbeeld alsSpawnPoint
. - Maak in
Scene2
een ander leeg GameObject met de naamTeleportPoint2
en tag het op dezelfde manier. - Deze GameObjects dienen als spawnlocaties bij de overgang tussen scènes.
Een teleportatiescript maken
Het teleportatiescript regelt de scèneovergangen en zorgt ervoor dat de speler naar de juiste locatie in de nieuwe scène beweegt en vervolgens de vorige scène verwijdert.
Teleportatie 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;
}
}
}
- Maak een nieuw C#-script met de naam
Teleportation.cs
in de mapScripts
. - Koppel dit script aan een object dat als teleportatietrigger fungeert, zoals een deur of portaal.
- Geef
sceneToLoad
de naam van de scène waarnaar u wilt overgaan en zorg ervoor dat het teleportatiepunt in de nieuwe scène correct is getagd.
Spelergegevens over scènes heen verwerken
Als het voor uw spel nodig is om spelergegevens (zoals inventaris, gezondheid, etc.) in verschillende scènes bij te houden, implementeert u een strategie voor gegevenspersistentie.
Blijvende spelergegevens
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);
}
}
}
- Maak een nieuw C#-script met de naam
PlayerData.cs
en koppel het aan het spelerobject of een afzonderlijk GameObject. - Zorg ervoor dat dit GameObject niet wordt vernietigd tijdens scèneovergangen door
DontDestroyOnLoad(gameObject)
te gebruiken.
Conclusie
Teleporteren tussen scènes in Unity, met name met additief scène laden en ontladen, biedt een naadloze ervaring. Deze methode behoudt belangrijke game-objecten zoals de speler en beheert bronnen efficiënt door de vorige scène te ontladen. Een dergelijke aanpak is met name handig in games met grote of continue omgevingen. Pas deze opstelling verder aan om te voldoen aan specifieke gameplay-vereisten, zoals het onderhouden van statusgegevens of het toevoegen van visuele effecten tijdens overgangen.