Unity

Unity - Startup Manager (менеджер загрузки)

Unity - Startup Manager (менеджер загрузки) это первое с чего начинается работа приложения. Startup Manager логично вызвать на сцене с загрузочным экраном, который может быть как просто черным, так и содержать какие-то изображения с текстом или индикатор загрузки.

В опубликованных ранее материалах говорилось, про порядок загрузки скриптов. В данном примере менеджер загрузки будет инициализировать классы менеджер настроек и менеджер локализации.

Менеджер настроек (SettingsManager) будет инициализирован раньше чем менеджер локализации (LocalizationManager), т.к. SettingsManager загружает пользовательские настройки, в т.ч. которые использует LocalizationManager для выбора языка.

Допустим мы создали сцену с экраном загрузки, на ней необходимо создать GameObject, к которому будут добавлены классы всех трех менеджеров, с которыми мы работаем в этой сцене в следующем порядке, однако, более правильно будет каждому менеджеру создать собственный объект:



А сам код менеджера загрузки (StartupManager) будет выглядеть следующим образом:
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.SceneManagement;
  5.  
  6. public class StartupManager : MonoBehaviour {
  7.  
  8.     private IEnumerator Start () 
  9.     {
  10. 	SettingsManager.instance.InitSettings();
  11.  
  12.         while (!SettingsManager.instance.GetIsReady ())
  13.         {
  14.             yield return null;
  15.         }
  16.  
  17. 	LocalizationManager.instance.InitLocalized();
  18.  
  19.         while (!LocalizationManager.instance.GetIsReady ()) 
  20.         {
  21.             yield return null;
  22.         }
  23.  
  24.         // задержка на 2 секунды, чтобы загрузочный экран пропал не сразу
  25.         yield return new WaitForSeconds(02);
  26.  
  27.         // Если требуется более плавный переход от сцены с 
  28.         // загрузочным экраном к сцене с меню, это необходимо 
  29.         // реализовать через отдельный менеджер (например SceneSplashManager),
  30.         // вызов которого будет здесь вместо загрузки сцены Main.
  31.         SceneManager.LoadScene("Main");
  32.     }
  33. }