오늘의 학습 키워드

UI 팝업 관리

 

공부한 내용

UI 팝업 관리

지난 주에 계획했던 대로 UI 팝업 관리를 구현하게 되었다.

ShowPopup에서 현재 켜져있는 UI인지 어떻게 검출할지를 고민을 했었다.

나는 Canvas의 SortOrder도 고려하고 싶어서 Stack보다 삽입 삭제가 자유로운 LinkedList를 사용하였고

현재 팝업이 켜져있는지 검출하기 위해 name으로 검사해서 true라면 out으로 반환한 뒤 SortOrder를 적용하게 했다.

여기서 name으로 검출하기 전에 팝업을 생성할 시기에 Instantitate를 사용하면 이름 뒤에 (Clone)이 붙으므로 Substring으로 제거해주는 작업도 진행하였다.

public T ShowPopup<T>() where T : UIBase
    {
        return ShowPopup(typeof(T).Name) as T;
    }

    public UIBase ShowPopup(string popupName)
    {
        if (_currentPopups.Count > 0)
        {
            if (IsPopupExist(popupName, out UIBase popup))
            {
                SetPopupFront(popup);
                return null;
            }
        }

        if (!_popupDict.ContainsKey(popupName))
        {
            _popupDict.Add(popupName, ResourceManager.Instance.Load<UIBase>($"UI/{popupName}"));
        }

        UIBase uiPopup = UnityEngine.Object.Instantiate(_popupDict[popupName]);

        uiPopup.name = GetNameSubStringClone(uiPopup.name);

        SetPopupFront(uiPopup);

        return uiPopup;
    }
private bool IsPopupExist(string popupName, out UIBase uiPopup)
    {
        foreach (var popup in _currentPopups)
        {
            if (popupName.Equals(popup.name))
            {
                uiPopup = popup;
                return true;
            }
        }

        uiPopup = null;
        return false;
    }

 

업그레이드 틀 구현

무기 업그레이드 부분을 맡게 되어 UI도 구현하게 되었다.

 

오늘의 회고

 오늘은 새 프로젝트 발제가 있어 팀 기획을 진행했다. 여러가지 종류 중에 뱀파이버 서바이벌 스타일의 게임을 제작하기로 하였고 나는 UI 팝업과 무기 업그레이드를 맡게 되었다. 원래 맡고 싶었던 부분이던 만큼 꽤 재미있게 진행했고 이후에 레벨업 시 다른 팀원으로부터 호출될 함수도 어떻게 구현할지 구상중이다.

 내일은 무기 업그레이드 구체화와 레벨업 관련해서 팀원과 상의할 생각이다. 구현 후 시간이 남으면 다른 작업들을 더 맡아서 할 생각이다. 내일도 파이팅!

+ Recent posts