코드
public class UIManager : InGameSingleton<UIManager>
{
[SerializeField] private List<BaseUI> uiList;
//UI를 여는 함수를 제네릭으로 선언
public void Show<T>(params object[] param) where T : BaseUI
{
var ui = uiList.Find(obj => obj.name == typeof(T).ToString());
if(ui != null)
{
ui.SetActive(true);
ui.opened.Invoke(param);
}
}
//UI를 닫는 함수를 제네릭으로 선언
public void Hide<T>(params object[] param) where T : BaseUI
{
var ui = uiList.Find(obj => obj.name == typeof(T).ToString());
if (ui != null)
{
ui.SetActive(false);
ui.closed.Invoke(param);
}
}
}
분석
장점
싱글톤 패턴 사용:
• InGameSingleton를 상속받아 싱글톤 패턴을 구현함으로써, 게임 내에서 유일한 인스턴스를 보장합니다. 이는 여러 곳에서 동일한 매니저 인스턴스를 참조할 수 있게 해줍니다.
유닛 스폰 기능:
• 다양한 유닛 스폰 기능을 제공합니다. 예를 들어, SpawnUnit, LoadUnit, SpawnUnitRed 메서드를 통해 유닛을 스폰할 수 있습니다.
• 유닛이 스폰될 위치가 이미 차지되어 있는지 확인하고, 새로운 위치를 찾는 로직이 포함되어 있습니다.
유닛 스폰 버튼 생성:
• CreateSpawnBtn 메서드를 통해 유닛 스폰 버튼을 동적으로 생성하고, 버튼 클릭 시 유닛을 스폰하는 기능을 제공합니다.
화폐 체크 및 환불 기능:
• CheckCurrency와 RefundCost 메서드를 통해 유닛 스폰 시 필요한 화폐를 체크하고, 스폰 실패 시 화폐를 환불하는 기능을 제공합니다.
오브젝트 풀 초기화:
• DisableObjectPool 메서드를 통해 오브젝트 풀을 초기화하고, 자식 오브젝트들을 비활성화하는 기능을 제공합니다.
단점
개선 제안