using UnityEngine;
public sealed class Managers : MonoBehaviour
{
private static Managers instance;
// 필요한 매니저 프로퍼티들을 여기에 추가
public static GameManager Game { get { return instance.gameManager; } }
public static UIManager UI { get { return instance.uiManager; } }
public static DataManager Data { get { return instance.dataManager; } }
// 매니저 인스턴스들
private GameManager gameManager;
private UIManager uiManager;
private DataManager dataManager;
// 씬이 로드되기 전에 Init을 호출하여 초기화 작업업
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void Init()
{
GameObject go = new GameObject("@Managers");
instance = go.AddComponent<Managers>();
DontDestroyOnLoad(go);
// 매니저들 초기화
instance.gameManager = CreateManager<GameManager>(go.transform);
instance.uiManager = CreateManager<UIManager>(go.transform);
instance.dataManager = CreateManager<DataManager>(go.transform);
}
private static T CreateManager<T>(Transform parent) where T : Component, IManager
{
GameObject go = new GameObject(typeof(T).Name);
go.transform.SetParent(parent);
return go.AddComponent<T>();
}
}
// 아래는 모두 예제입니다.
public interface IManager
{
void Init();
}
// GameManager.cs - 예제 매니저
public class GameManager : MonoBehaviour, IManager
{
public void Init()
{
Debug.Log("GameManager 초기화");
}
}
// UIManager.cs - 예제 매니저
public class UIManager : MonoBehaviour, IManager
{
public void Init()
{
Debug.Log("UIManager 초기화");
}
}
// DataManager.cs - 예제 매니저
public class DataManager : MonoBehaviour, IManager
{
public void Init()
{
Debug.Log("DataManager 초기화");
}
}
이 프레임워크의 주요 특징과 사용 방법
1. 구조설명:
Managers 클래스는 싱글톤 패턴을 사용하여 모든 매니저들을 관리합니다.
IManager 인터페이스는 모든 매니저가 Init() 메서드를 구현하도록 보장합니다.
2. 매니저 추가 방법:
// 1. Managers 클래스에 프로퍼티 추가
public static NewManager New { get { return instance.newManager; } }
// 2. private 필드 추가
private NewManager newManager;
// 3. Init() 메서드에서 매니저 생성
instance.newManager = CreateManager<NewManager>(go.transform);
3. 매니저 사용 예시:
// 어느 스크립트에서든 다음과 같이 사용 가능
void Start()
{
// 게임 매니저 사용
Managers.Game.StartGame();
// UI 매니저 사용
Managers.UI.ShowMainMenu();
// 데이터 매니저 사용
Managers.Data.SaveData();
}
4. 주요 장점:
명확한 초기화 순서 - 씬이 로드되기 전에 Managers에서 원하는 순서대로 초기화를 진행합니다.