using Cysharp.Threading.Tasks;
using UnityEngine;
namespace Monpl.UI
{
public class UIManager : MonoBehaviour
{
private static UIManager _instance;
public static UIManager Instance
{
get
{
if (_instance != null)
return _instance;
_instance = CreateManager();
return _instance;
}
}
public static ScreenContainer ScreenContainer { get; private set; }
public static PopupContainer PopupContainer { get; private set; }
///
/// Scene에서 UIManager를 초기화 해준다.
///
public async UniTask InitOnScene(string initScreenName)
{
if (!FindContainers())
return;
// ScreenSize를 정확히 찾기 위해선 한 프레임 쉬어야한다.
await UniTask.Yield();
ScreenContainer.PreInit();
await PopupContainer.PreInit();
ScreenContainer.ChangeScreen(initScreenName);
}
private static UIManager CreateManager()
{
var newManager = new GameObject("UIManager").AddComponent();
DontDestroyOnLoad(newManager);
return newManager;
}
private bool FindContainers()
{
ScreenContainer = FindObjectOfType();
PopupContainer = FindObjectOfType();
if (ScreenContainer != null && PopupContainer != null)
return true;
Debug.LogError("UImanager Init fail..");
return false;
}
}
}