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

  1. Ga in Unity naar Bestand > Nieuwe scène om een ​​nieuwe scène te maken. Sla deze op in je map Assets en noem deze Scene1.
  2. Herhaal het proces om nog een scène te maken met de naam Scene2.
  3. Voeg beide scènes toe aan de build-instellingen door naar Bestand > Build-instellingen te gaan en te klikken op Open scènes toevoegen.

Teleportatiepunten aanwijzen

Voor elke scène is een specifiek punt nodig waar de speler na teleportatie verschijnt.

  1. Maak in Scene1 een leeg GameObject en noem het TeleportPoint1. Tag het op de juiste manier, bijvoorbeeld als SpawnPoint.
  2. Maak in Scene2 een ander leeg GameObject met de naam TeleportPoint2 en tag het op dezelfde manier.
  3. 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;
        }
    }
}
  1. Maak een nieuw C#-script met de naam Teleportation.cs in de map Scripts.
  2. Koppel dit script aan een object dat als teleportatietrigger fungeert, zoals een deur of portaal.
  3. 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);
        }
    }
}
  1. Maak een nieuw C#-script met de naam PlayerData.cs en koppel het aan het spelerobject of een afzonderlijk GameObject.
  2. 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.