Programing/Unity(C#)

[Unity] UI 요소 제외하고 클릭 이벤트 감지하기

hye3193 2024. 1. 7. 21:10

https://docs.unity3d.com/kr/530/ScriptReference/EventSystems.EventSystem.IsPointerOverGameObject.html

 

EventSystems.EventSystem-IsPointerOverGameObject - Unity 스크립팅 API

Is the pointer with the given ID over an EventSystem object?

docs.unity3d.com

유니티 공식 문서

 

 

if(Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
{
    SceneManager.LoadScene("Game");
}

* GetMouseButtonDown은 터치 이벤트도 함께 감지할 수 있다

 

EventSystem의 IsPointerOverGameObject()함수는 포인터가 eventSystem 오브젝트 위에 있는지 여부를 판단해 true, false를 반환함

 

기본적으로 해당 함수는 마우스 왼쪽 클릭(-1)을 인자로 가지고 있다

 

터치 이벤트를 감지해야 하는 경우, 매개 변수를 따로 전달해주어야 하기에 Input.GetTouch(0).fingerId 값을 전달해주면 된다

 

터치 이벤트를 감지해야 할 경우, 공식 문서 상 예시 코드는 아래와 같다

if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
    if(EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
    {
        Debug.Log("Touched the UI");
    }
}