Як телепортуватися між сценами в Unity
Телепортація між сценами в Unity є корисною функцією для переходу гравців між різними рівнями або областями. У цьому посібнику описано, як реалізувати телепортацію сцени за допомогою додаткового завантаження сцени, забезпечення збереження даних гравця та вивантаження старої сцени після телепортації. Такий підхід забезпечує плавний перехід без втрати даних або об’єктів гравця.
Налаштування сцен і точок телепортації
Спочатку ми налаштуємо сцени та позначимо в них точки телепортації.
Створення сцен
- У Unity перейдіть до
Файл > Нова сцена
, щоб створити нову сцену. Збережіть його у папціAssets
, назвавши йогоScene1
. - Повторіть процес, щоб створити іншу сцену під назвою
Scene2
. - Додайте обидві сцени до налаштувань збірки, перейшовши до
Файл > Параметри збірки
і натиснувшиДодати відкриті сцени
.
Призначення точок телепортації
Для кожної сцени потрібна визначена точка, де гравець з’явиться після телепортації.
- У
Scene1
створіть порожній GameObject і назвіть йогоTeleportPoint1
. Позначте його відповідним тегом, наприклад, якSpawnPoint
. - У
Scene2
створіть ще один порожній GameObject під назвоюTeleportPoint2
і позначте його подібним чином. - Ці GameObjects слугуватимуть місцями появи під час переходу між сценами.
Створення сценарію телепортації
Сценарій телепортації керує переходом сцени, забезпечуючи переміщення гравця в правильне місце в новій сцені, а потім вивантажує попередню сцену.
Скрипт телепортації
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;
}
}
}
- Створіть новий сценарій C# під назвою
Teleportation.cs
у папціScripts
. - Прикріпіть цей сценарій до об’єкта, який діятиме як тригер телепортації, наприклад до дверей або порталу.
- Встановіть
sceneToLoad
на назву сцени, до якої потрібно перейти, і переконайтеся, що точка телепортації в новій сцені позначена правильно.
Обробка даних гравця між сценами
Якщо ваша гра вимагає збереження даних про гравця (як-от інвентар, здоров’я тощо) у різних сценах, застосуйте стратегію збереження даних.
Постійні дані гравця
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);
}
}
}
- Створіть новий сценарій C# під назвою
PlayerData.cs
і приєднайте його до об’єкта гравця або окремого GameObject. - Переконайтеся, що цей GameObject не знищено під час переходів між сценами за допомогою
DontDestroyOnLoad(gameObject)
.
Висновок
Телепортація між сценами в Unity, особливо з додатковим завантаженням і вивантаженням сцени, забезпечує безперебійний досвід. Цей метод зберігає важливі ігрові об’єкти, такі як гравець, і ефективно керує ресурсами, вивантажуючи попередню сцену. Такий підхід особливо корисний в іграх із великим або безперервним середовищем. Додатково налаштуйте це налаштування відповідно до конкретних вимог гри, як-от збереження даних про стан або додавання візуальних ефектів під час переходів.