반응형
UI
팝업창
Managers.Resource.Instantiate("UI/PopUp_Canvas"); // 팝업 UI 캔버스 프리팹 생성. 이전에 📜ResourceManager 참고
게임에는 수 많은 팝업 UI 가 사용될 수 있다. 그러려면 각각의 팝업 UI 들이 독립적인 캔버스가 있어야 하고 이를 프리팹으로 만들어두어 그때 그때 생성하는 방식으로 사용해야 한다. 캔버스들은 서로 캔버스의 sort order 에 의하여 먼저 그려지고 가장 위에 그려지고 이런 순위가 결정된다.
UI 입력 이벤트만 처리
using UnityEngine.EventSystems;
//..
if (EventSystem.current.IsPointerOverGameObject())
return;
IsPointerOverGameObject()
- 마우스 클릭 이벤트가 UI 위에서 이루어졌다면 true 리턴. 보다 정확히 말하면 마우스 포인터가 EventSystem 오브젝트 위에 있다면 True
- 플레이어가 마우스 클릭한 곳으로 이동하는 로직이 있다면, 클릭 버튼을 누를 때 플레이어가 그 클릭 버튼으로 이동하면 안된다. 그냥 클릭 버튼 이벤트만 처리 되야 한다. 따라서 이럴때 마우스 클릭 이벤트가 UI 위에서 이루어진 것이라면 위와 같은 코드를 통해 플레이어 이동을 하지 않도록 할 수 있다.
- current 👉 현재 EventSystem 리턴
UI 자동화가 필요한 이유
[SerializedField] Text _text;
int _score = 0;
// 버튼을 클릭할 때마다 텍스트 UI 의 점수 업데이트
public void OnButtonClicked()
{
Debug.Log("ButtonClicked");
_score++;
_text.text = $"점수 : {_score}";
}
게임의 규모가 커지면 에디터 툴로 UI 들을 관리하기엔 너무 어렵다. 만약 버튼 하나 눌리면 실행되야 할 함수가 50개라면? 툴에 일일이 스크립트를 등록해 주는 것도 힘들고 실수가 발생할 확률도 높아질 뿐더러 원인을 찾기도 힘들어진다. 또한 [SerializedField]를 통해 참조하고 할당해주어야 할 다른 UI 들도 정말 많아질 것이다.
하지만, 툴로 구현할 수 있는 모든 것은 다 코드로도 구현할 수 있다. UI 자동화를 통해, 이름만으로 자동으로 UI 오브젝트들을 찾고 이를 연결해서 버튼 이벤트에 등록시켜보자. 다음 포스팅부터!
반응형
'공부 > 인프런 - Rookiss' 카테고리의 다른 글
Part 3-7-4. UI : UI Manager, Blocker (0) | 2023.08.25 |
---|---|
Part 3-7-3. UI : UI 자동화 (0) | 2023.08.24 |
Part 3-7-1. UI : 기초, Rect Transform (앵커) (0) | 2023.08.23 |
Part 3-6-3. 애니메이션 : KeyFrame, Event (0) | 2023.08.22 |
Part 3-6-2. 애니메이션 : State 패턴, State Machine (0) | 2023.08.22 |