Можно ли узнать что сменилась сцена в UNITY?

У меня есть DontDestroyOnLoad объект, и соответственно у него метод Start() не будет работать потому что он начал при запуске проекта и не будет перезагружаться, а мне необходимо чтобы именно он вызывал нужные мне методы при смене сцены.

Пример: Мой объект создался, сработал его Start мы на первой сцене. Сцена сменилась данный объект не удалился окружение сменилось, как мне вызывать метод сейчас? Как именно ему понять что сцена сменилась?


Ответы (1 шт):

Автор решения: RiotBr3aker

Можно (и нужно) использовать специальный API для контроля и управления сценами. В нем как раз есть специальные события:

  1. activeSceneChanged
  2. sceneLoaded
  3. sceneUnloaded

Вызывать колбеки юнити своими руками - плохой тон, лучше реализовать свой метод и вызывать его по событиям смены сцены и в Start. Более того, колбеки для событий выше должны принимать 2 аргумента - прошлую и новую сцены. В вашем случае можно написать что-то подобное:

using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneChangeSubscriber : MonoBehaviour {
    void Awake() {
        DontDestroyOnLoad(this.gameObject);
        SceneManager.activeSceneChanged += Initialization;
    }

    void Start() {
        // Заглушка для вызова колбека при инициализации текущего объекта
        var currentScene = SceneManager.GetActiveScene();
        Initialization(currentScene, currentScene);
    }

    void Initialization(Scene current, Scene next) {
        // Делаем вещи при смене сцены
        Debug.Log($"Last scene [{current.name}] was replaced by [{next.name}]");
    }
}
→ Ссылка