언어/유니티

2. 에러 프리팹 관리 스크립트StaticManager ,UIManager

깡 딱 2023. 11. 17. 11:31
728x90

StaticManager

 

로그인 코드를 볼때

ui를 가져올때 staticmanager 코드에서 인스턴스 해주는 것이 많았다.

그래서 오늘은 staticmanager을 공부 해보려 한다.

 

 


- 키워드 : 인스턴스 

    public static StaticManager Instance { get; private set; }

    public static BackendManager Backend { get; private set; }
    public static UIManager UI { get; private set; }

싱글턴 패턴 및

staticmanager 코드 자식으로 불러오기 위해서 선언


- 키워드 : GetComponentInchildren<T>();

 

Init 코드는 한마디로 싱글톤패턴 및 오브젝트 파괴 방지 

또한 ui Backend 를 staticmanager 자식으로 만들기 위해서 선언 

    void Awake() {
        Init();
    }

    void Init() { // 이코드를 넣으면 ui,backend 자식이 생김 
        if (Instance != null) {
            Destroy(gameObject);
            return;
        }

        Instance = this;
        DontDestroyOnLoad(this.gameObject);

        Backend = GetComponentInChildren<BackendManager>();
        UI = GetComponentInChildren<UIManager>();

        UI.Init();
        Backend.Init();

 

 

결국 아래와 같이 생긴다고 볼수 있음

uimanager 에있는Init 를가져온다는 뜻임 (저 코드 안에도 init가 있기 때문에 )


- 키워드 : 씬 변경및 페이드아웃 코드

    public void ChangeScene(string sceneName) {
        UI.FadeUI.FadeStart(FadeUI.FadeType.ChangeToBlack, () => SceneManager.LoadScene(sceneName));
    }

UIManager

 

ui manager 안에 fade ui ,alert ui 에 대해서 설명하겠다.

 

- 키워드 : 인스턴스 

   [SerializeField]
    private FadeUI _fadeUI;
    [SerializeField]
    private AlertUI _alertUI;

    // 알림 UI
    public AlertUI AlertUI {
        get { return _alertUI; }
    }

    //페이드 in/out UI
    public FadeUI FadeUI {
        get { return _fadeUI; }
    }

    [SerializeField] private GameObject _loadingAnimationIcon;

 


- 키워드 : 자식 , 활성화 , 비활성화

    public void Init() {
        AlertUI.Init();
        FadeUI.Init();
        
        AlertUI.gameObject.SetActive(false);
        FadeUI.gameObject.SetActive(false);
        _loadingAnimationIcon.gameObject.SetActive(false);

    }

 

방금 말했듯이 Init 이코드를 가져와서 위에 자식으로 만들어주는거다 

uimanager의 자식으로 alertui와 fadeui가 생기게 되는것이다. 

또한 그자식들의 버튼은 비활성화 되어있다고 보면된다. 

 


 

- 키워드 : Resources 파일 생성,검색

 

    private bool TryLoadUIObject(string prefabName, Transform parent, out GameObject gameObject) {
        gameObject = null;

        string path = $"{prefabName}";
        GameObject loadObject = Resources.Load<GameObject>(path);

        if (loadObject == null) {
            Debug.LogError($"{prefabName}가 Prefab에 존재하지 않습니다. in {path}");
            return false;
        }

        gameObject = Object.Instantiate(loadObject, parent, true);
        gameObject.transform.localScale = Vector3.one;
        gameObject.transform.localPosition = Vector3.zero;

        return true;
    }

처음 볼땐 이해가 안됬는데

이거는 오브젝트가 없을 경우, Resources에서 검색하여 생성한다. 이다.

보면 loadObject를  리소스를 로드 하는것 이라고 정의했다.

그래서 이 loadObject가 존재하지 않는다면 false로 

크기와 위치를 설정해주고 성공했다면 true을 반환

 


- 키워드 : 오류가 났을때 이패널을 넣어서 어떤 패널을 넣을 건지 결정

    // ====================================================================
    // 현재 씬에 UICanvas를 생성한다. 씬이 이동할 경우 없어지며 새로운 UI를 만든다.
    // 생성만 가능하기에 삭제가 가능한 Resources의 오브젝트만 해당 UI로 할당한다.
    // ====================================================================
    public void OpenUI<T>(string folderPath, Transform parent) where T : BaseUI{
        if (TryLoadUIObject(folderPath + "/"+ typeof(T).Name, parent, out var uiObject) == false) {
            
            StaticManager.UI.AlertUI.OpenErrorUI(GetType().Name,MethodBase.GetCurrentMethod()?.ToString(), folderPath + "를 찾을 수 없습니다.");
            return;
        }
        
        uiObject.GetComponent<BaseUI>().OpenUI();
    }

 

 

 

 

 

 

 

 

- 키워드 : 로딩 애니메이션

 

로딩 애니메이션이 왔다갔다 하는거 활성화 /비활성화

    public void SetLoadingIcon(bool active) { //로딩 애니메이션
        _loadingAnimationIcon.SetActive(active);
    }

 

 

 

//2023년11월17일 11:31분 openui부터 시작하면됨

//2023년11월22일  21:18 분 다음장

728x90