В Unity управление сценами — важная часть разработки игр. Часто возникает необходимость программно получить номер сцены для различных целей, таких как продвижение по уровню, переходы между сценами или сохранение/загрузка хода игры. В этой статье мы рассмотрим несколько методов получения правильного номера сцены в Unity, а также приведем примеры кода для каждого подхода.
Метод 1: использование SceneManager.GetActiveScene().buildIndex
Класс SceneManager в Unity предоставляет метод GetActiveScene(), который возвращает активную сцену как объект сцены. Обращаясь к свойству buildIndex объекта Scene, мы можем получить номер сцены.
using UnityEngine.SceneManagement;
int sceneNumber = SceneManager.GetActiveScene().buildIndex;
Debug.Log("Scene Number: " + sceneNumber);
Метод 2: сравнение Scene.name с SceneManager.GetSceneByBuildIndex().name
В качестве альтернативы мы можем сопоставить имя активной сцены с именами всех сцен в настройках сборки. Этот метод полезен, когда имена сцен более значимы или описательны, чем их индексы сборки.
using UnityEngine.SceneManagement;
Scene activeScene = SceneManager.GetActiveScene();
int sceneNumber = -1;
for (int i = 0; i < SceneManager.sceneCountInBuildSettings; i++)
{
Scene scene = SceneManager.GetSceneByBuildIndex(i);
if (scene.name == activeScene.name)
{
sceneNumber = i;
break;
}
}
Debug.Log("Scene Number: " + sceneNumber);
Метод 3: использование события AsyncOperation.completed
Если вы загружаете сцены асинхронно, вы можете использовать класс AsyncOperation для получения номера сцены после завершения загрузки.
using UnityEngine.SceneManagement;
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("SceneName");
asyncLoad.completed += operation =>
{
int sceneNumber = SceneManager.GetSceneByName("SceneName").buildIndex;
Debug.Log("Scene Number: " + sceneNumber);
};
Метод 4: собственный сценарий управления сценой.
Вы можете создать собственный сценарий для управления сценами в вашей игре. Этот скрипт может отслеживать номера сцен и предоставлять общедоступный метод для получения текущего номера сцены.
using UnityEngine;
public class SceneManagement : MonoBehaviour
{
public static SceneManagement instance;
public int currentSceneNumber;
private void Awake()
{
if (instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}
else
{
Destroy(gameObject);
}
}
public int GetCurrentSceneNumber()
{
return currentSceneNumber;
}
}
Чтобы получить доступ к текущему номеру сцены из любого другого скрипта, вы можете использовать следующий код:
int sceneNumber = SceneManagement.instance.GetCurrentSceneNumber();
Debug.Log("Scene Number: " + sceneNumber);
В этой статье мы рассмотрели различные методы получения правильного номера сцены в Unity. Независимо от того, предпочитаете ли вы использовать класс SceneManager, сравнивать имена сцен, использовать асинхронную загрузку или реализовывать собственный сценарий управления сценой, эти подходы позволят вам получить программный доступ к номеру сцены для широкого спектра сценариев разработки игр.