Chapter 7-3. UI : UI 자동화의 필요성, IsPointerOverGameObject()

Date:     Updated:

카테고리:

태그:

인프런에 있는 Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진 강의를 듣고 정리한 필기입니다. 😀
🌜 강의 들으러 가기 Click

Chapter 7. 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}";
}

image

게임의 규모가 커지면 에디터 툴로 UI 들을 관리하기엔 너무 어렵다. 만약 버튼 하나 눌리면 실행되야 할 함수가 50개라면? 툴에 일일이 스크립트를 등록해 주는 것도 힘들고 실수가 발생할 확률도 높아질 뿐더러 원인을 찾기도 힘들어진다. 또한 [SerializedField]를 통해 참조하고 할당해주어야 할 다른 UI 들도 정말 많아질 것이다. 툴로 구현할 수 있는 모든 것은 다 코드로도 구현할 수 있다. UI 자동화를 통해, 이름만으로 자동으로 UI 오브젝트들을 찾고 이를 연결해서 버튼 이벤트에 등록시켜보자. 다음 포스팅부터!



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Unity Lesson 2 카테고리 내 다른 글 보러가기

댓글 남기기