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

  1. I Unity, gå til Fil > Ny scene for å lage en ny scene. Lagre den i mappen Assets, og gi den navnet Scene1.
  2. Gjenta prosessen for å lage en annen scene kalt Scene2.
  3. Legg til begge scenene til byggeinnstillingene ved å gå til Fil > Bygginnstillinger og klikke Legg til åpne scener.

Utpeke teleporteringspunkter

Hver scene trenger et bestemt punkt hvor spilleren vil vises etter teleportering.

  1. I Scene1 oppretter du et tomt GameObject og gir det navnet TeleportPoint1. Merk den på riktig måte, for eksempel som SpawnPoint.
  2. I Scene2, lag et annet tomt GameObject kalt TeleportPoint2 og merk det på samme måte.
  3. 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;
        }
    }
}
  1. Lag et nytt C#-skript med navnet Teleportation.cs i mappen Scripts.
  2. Fest dette skriptet til et objekt som vil fungere som en teleportutløser, for eksempel en dør eller portal.
  3. 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);
        }
    }
}
  1. Lag et nytt C#-skript kalt PlayerData.cs og fest det til spillerobjektet eller et separat GameObject.
  2. 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.