Unity 사용자 매뉴얼 2022.3 (LTS) - 스크린 전환 생성
이 문서에서는 Unity에서 UI 요소 간의 전환을 관리하는 방법과 이를 위한 ScreenManager 클래스를 구현하는 방법을 다룹니다. 이 가이드는 애니메이터 컨트롤러를 활용하여 간단하게 UI 스크린 간 전환을 구현할 수 있도록 돕습니다.
개요
스크린 간 전환은 UI를 구성하는 데 있어 필수적인 기능이며, 이 문서에서는 폐쇄 및 개방 상태가 있는 Animator Controller를 사용하여 이 과정을 간소화하는 방법을 소개합니다.
내용 | 설명 |
---|---|
상태 | 각 스크린은 Open 및 Closed 두 가지 상태를 가집니다. |
전환 | 스크린 간 전환은 현재 열린 스크린을 닫고 새로운 스크린을 여는 방식으로 이루어집니다. |
ScreenManager | 열린 스크린을 추적하고 자동으로 닫을 수 있도록 도와주는 클래스입니다. |
애니메이터 컨트롤러 설정
애니메이터 컨트롤러는 스크린 전환을 수행하기 위한 최소한의 설정을 필요로 합니다. 기본적으로 다음과 같은 조건이 필요합니다:
- 하나의 부울 파라미터:
Open
- 두 개의 상태:
Open
,Closed
- 각 상태에는 최소 하나의 키프레임이 포함된 애니메이션이 있어야 합니다.
전환 설정
전환을 설정하려면 다음과 같은 조건을 정의해야 합니다:
- Open에서 Closed로 전환: Open 파라미터가 false일 때 전환 발생.
- Closed에서 Open으로 전환: Open 파라미터가 true일 때 전환 발생.
ScreenManager 클래스
ScreenManager 클래스의 주요 기능은 현재 열려 있는 스크린을 관리하고, 새로운 스크린을 열며, 애니메이션을 제어하는 것입니다.
스크립트 예제
아래 코드는 ScreenManager 클래스를 구성하는 예시입니다:
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;
using System.Collections.Generic;
public class ScreenManager : MonoBehaviour {
public Animator initiallyOpen;
private Animator m_Open;
private int m_OpenParameterId;
private GameObject m_PreviouslySelected;
const string k_OpenTransitionName = "Open";
const string k_ClosedStateName = "Closed";
public void OnEnable() {
m_OpenParameterId = Animator.StringToHash(k_OpenTransitionName);
if (initiallyOpen != null) {
OpenPanel(initiallyOpen);
}
}
public void OpenPanel(Animator anim) {
if (m_Open == anim) return;
anim.gameObject.SetActive(true);
var newPreviouslySelected = EventSystem.current.currentSelectedGameObject;
anim.transform.SetAsLastSibling();
CloseCurrent();
m_PreviouslySelected = newPreviouslySelected;
m_Open = anim;
m_Open.SetBool(m_OpenParameterId, true);
GameObject go = FindFirstEnabledSelectable(anim.gameObject);
SetSelected(go);
}
static GameObject FindFirstEnabledSelectable(GameObject gameObject) { ... } // 생략
public void CloseCurrent() { ... } // 생략
IEnumerator DisablePanelDeleyed(Animator anim) { ... } // 생략
private void SetSelected(GameObject go) { ... } // 생략
}
스크립트 연결하기
- 새 게임 오브젝트 생성: 이름을 "ScreenManager"로 변경합니다.
- 스크립트 추가: 생성한 ScreenManager 위에 코드를 붙여넣습니다.
- 초기 스크린 설정: Inspector에서 초기 스크린을 설정하여 씬 시작 시 열리도록 합니다.
UI 버튼 연결
UI 버튼을 사용하여 스크린 전환을 트리거하려면 다음 단계를 따릅니다:
- 버튼을 선택하고 On Click() 리스트에 새 액션을 추가합니다.
- ScreenManager 게임 오브젝트를 ObjectField로 드래그합니다.
- 드롭다운에서
ScreenManager->OpenPanel(Animator)
를 선택합니다. - 열고자 하는 패널을 마지막 ObjectField로 드래그하여 드롭합니다.
참고사항
이 방법을 사용하려면 각 스크린에 Open 파라미터와 Closed 상태가 있는 AnimatorController가 필요합니다. 스크린 및 상태 머신의 구조는 중요하지 않으며, 중첩된 스크린에도 동일하게 적용할 수 있습니다.
결론
이 문서에서 설명한 방법을 통해 Unity에서 UI 요소 간의 전환을 효율적으로 관리할 수 있습니다. ScreenManager 클래스를 활용하면 복잡한 UI 전환을 간편하게 구현할 수 있습니다.