유니티 함수 하나로 여러 UI 전환하기

박성준·2025년 2월 14일

유니티 복습용

목록 보기
4/23

이런 베이스를 먼저 준비.

public abstract class BaseUI : MonoBehaviour
{
    protected UIManager uiManager;

    public virtual void Init(UIManager uiManager)
    {
        this.uiManager = uiManager;
    }
    
    protected abstract UIState GetUIState(); 
    public void SetActive(UIState state)
    {
        gameObject.SetActive(GetUIState() == state);
    }
}

여기서

public void SetActive(UIState state)
{
        gameObject.SetActive(GetUIState() == state);
}

이 코드가 핵심적인 역할을 함.

public enum UIState
{
    Home,
    Game,
    Score,
}

UI의 상태를 나타낼 수 있도록 열거형을 만든다.
이제 전환될 UI에 스크립트를 만들어 달아준다.

public class HomeUI : BaseUI
{
    protected override UIState GetUIState()
    {
        return UIState.Home;
    }

    public override void Init(UIManager uiManager)
    {
        base.Init(uiManager);
    }
}

열거형에는 Home, Game, Score 총 3개가 있으니 3개의 UI에 이름과 return 값만 맞게 설정해서 만든다.
이제 처음의 UIMANAGER에서 오브젝트의 스크립트들을 Get한뒤

public void ChangeState(UIState state)
{
        currentState = state;
        homeUI?.SetActive(currentState);
        gameUI?.SetActive(currentState);
        scoreUI?.SetActive(currentState);
}

이렇게 함수를 사용하면 (?는 null 검사용이다.) 각각의 스크립트의 Setactive가 자신의 GetUIState에 따라서 비교를 한다.
ex) HomeUI의 경우 UIState 열거형의 Home을 반환하니.
currentState가 UIState.Home일 경우 Home == Home이므로 다른 UI들은 false로 비활성화되고 HomeUI가 켜질 것이다.

profile
GameDeveloper

0개의 댓글