Cum să te teleportați între scene în Unity
Teleportarea între scene în Unity este o caracteristică utilă pentru tranziția jucătorilor între diferite niveluri sau zone. Acest tutorial acoperă cum să implementați teleportarea scenei folosind încărcarea aditivă a scenei, asigurând persistența datelor jucătorului și descărcarea scenei vechi după teleportare. Această abordare asigură o tranziție lină fără a pierde datele sau obiectele jucătorului.
Configurarea scenelor și a punctelor de teleportare
Mai întâi, vom configura scenele și vom desemna puncte de teleportare în ele.
Crearea scenelor
- În Unity, accesați
Fișier > Scenă nouă
pentru a crea o scenă nouă. Salvați-l în folderul dvs.Assets
, numindu-lScene1
. - Repetați procesul pentru a crea o altă scenă numită
Scene2
. - Adăugați ambele scene la setările de construcție accesând
Fișier > Setări de compilare
și făcând clic peAdăugați scene deschise
.
Desemnarea punctelor de teleportare
Fiecare scenă are nevoie de un punct desemnat în care jucătorul va apărea după teleportare.
- În
Scene1
, creați un GameObject gol și denumiți-lTeleportPoint1
. Etichetați-l corespunzător, de exemplu, caSpawnPoint
. - În
Scene2
, creați un alt GameObject gol numitTeleportPoint2
și etichetați-l în mod similar. - Aceste GameObjects vor servi ca locații de apariție la tranziția între scene.
Crearea unui script de teleportare
Scriptul de teleportare gestionează tranziția scenei, asigurându-se că jucătorul se deplasează în locația corectă în noua scenă și apoi descarcă scena anterioară.
Script de teleportare
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;
}
}
}
- Creați un nou script C# numit
Teleportation.cs
în folderulScripts
. - Atașați acest script la un obiect care va acționa ca un declanșator de teleportare, cum ar fi o ușă sau un portal.
- Setați
sceneToLoad
la numele scenei la care să faceți tranziția și asigurați-vă că punctul de teleportare din noua scenă este etichetat corect.
Manevrarea datelor jucătorilor de-a lungul scenelor
Dacă jocul dvs. necesită menținerea datelor jucătorilor (cum ar fi inventarul, starea de sănătate etc.) între scene, implementați o strategie de persistență a datelor.
Date persistente ale jucătorului
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);
}
}
}
- Creați un nou script C# numit
PlayerData.cs
și atașați-l la obiectul player sau la un GameObject separat. - Asigurați-vă că acest GameObject nu este distrus în timpul tranzițiilor scenei utilizând
DontDestroyOnLoad(gameObject)
.
Concluzie
Teleportarea între scene în Unity, în special cu încărcarea și descărcarea aditivă a scenei, oferă o experiență perfectă. Această metodă reține obiecte importante de joc precum jucătorul și gestionează eficient resursele prin descărcarea scenei anterioare. O astfel de abordare este deosebit de utilă în jocurile cu medii mari sau continue. Personalizați în continuare această configurație pentru a se potrivi cerințelor specifice de joc, cum ar fi menținerea datelor de stare sau adăugarea de efecte vizuale în timpul tranzițiilor.