Как понять, что сцена загружена и можно отключать анимацию загрузки?

В Unity есть несколько способов определить, что сцена успешно загружена и можно отключать анимацию загрузки. Вот несколько из них:

1. Использование событий:
- Создайте пустой GameObject в вашей сцене с загрузочной анимацией, например, "LoadingAnimation".
- Привяжите к нему скрипт "LoadingAnimationController".
- В скрипте "LoadingAnimationController" определите и вызывайте событие, когда сцена успешно загружена:

     using UnityEngine;
     using UnityEngine.SceneManagement;

     public class LoadingAnimationController : MonoBehaviour
     {
         public delegate void SceneLoadedEventHandler();
         public static event SceneLoadedEventHandler OnSceneLoaded;

         private void Start()
         {
             // Загружаем вашу сцену
             SceneManager.LoadScene("YourSceneName");
         }

         private void Update()
         {
             // Проверяем, что сцена загружена и анимация может быть отключена
             if (SceneManager.GetActiveScene().name == "YourSceneName" && OnSceneLoaded != null)
             {
                 OnSceneLoaded.Invoke();
             }
         }
     }

- Теперь вы можете отслеживать событие "OnSceneLoaded" в другом скрипте или компоненте:

     using UnityEngine;

     public class MySceneManager : MonoBehaviour
     {
         public GameObject loadingAnimation;

         private void Start()
         {
             LoadingAnimationController.OnSceneLoaded += OnSceneLoaded;
         }

         private void OnDestroy()
         {
             LoadingAnimationController.OnSceneLoaded -= OnSceneLoaded;
         }

         private void OnSceneLoaded()
         {
             // Выключаем анимацию загрузки
             loadingAnimation.SetActive(false);
         }
     }

2. Использование метода Coroutine:
- В вашем скрипте загрузки создайте метод Coroutine, который будет отслеживать завершение загрузки сцены, например:

     using UnityEngine;
     using UnityEngine.SceneManagement;

     public class SceneLoader : MonoBehaviour
     {
         public GameObject loadingAnimation;

         private void Start()
         {
             StartCoroutine(LoadSceneAsync());
         }

         private IEnumerator LoadSceneAsync()
         {
             // Загружаем вашу сцену
             AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("YourSceneName");

             // Ожидаем загрузку сцены
             while (!asyncLoad.isDone)
             {
                 yield return null;
             }

             // Выключаем анимацию загрузки
             loadingAnimation.SetActive(false);
         }
     }

- Привяжите этот скрипт к GameObject с загрузочной анимацией, и она будет отключена после загрузки сцены.

3. Использование метода SceneManager.sceneLoaded:
- В вашем скрипте загрузки добавьте обработчик события "SceneManager.sceneLoaded", который будет вызываться после загрузки сцены:

     using UnityEngine;
     using UnityEngine.SceneManagement;

     public class SceneLoader : MonoBehaviour
     {
         public GameObject loadingAnimation;

         private void Start()
         {
             SceneManager.sceneLoaded += OnSceneLoaded;
             SceneManager.LoadScene("YourSceneName");
         }

         private void OnDestroy()
         {
             SceneManager.sceneLoaded -= OnSceneLoaded;
         }

         private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
         {
             // Выключаем анимацию загрузки
             loadingAnimation.SetActive(false);
         }
     }

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

Вы можете выбрать любой из этих подходов в зависимости от вашей архитектуры проекта и предпочтений.