Unity

[Unity] EventSystem.current.IsPointerOverGameObject()

박도치 2024. 11. 20. 20:44

EventSystem.current.IsPointerOverGameObject() 

 

EventSystem.current.IsPointerOverGameObject() 는 Unity의 EventSystem에서 제공하는 메서드로 현재 마우스 커서나 터치 입력이 UI요소 위에 있는지 확인하는데 사용된다.

 

UI와 월드의 상호작용을 구분할 경우에 사용된다.

 

마우스 클릭 또는 터치가 UI위에서 일어날 경우 true를 반환하고, 아닐경우에 false를 반환한다.

 

어떤 경우에 사용되고 왜 사용했나?

마우스 클릭으로 이동하는 게임의 경우 가장 많이 사용되는데, 필자의 경우도 디펜스 게임에서 상자 오브젝트에 캐릭터를 배치해야 하는 경우가 있다.

 

상자를 클릭하면 어떤 캐릭터를 배치할 지 목록이 나오는데, 문제는 해당 버튼 UI를 클릭하면 터치로 인식해 캐릭터 목록이 꺼져버린다는 점이다.

 

그래서 아래 코드를 추가했을 때 배치하는 오브젝트를 클릭해서 나타나는 UI를 다시한번 클릭해도 return을 통해 해당 문제가 해결된다는 것이다.

 // 마우스 클릭 감지
 if (Input.GetMouseButtonDown(0)) // 0: 마우스 왼쪽 버튼
 {
     // UI 위를 클릭한 경우
     if (EventSystem.current.IsPointerOverGameObject())
         return; // UI가 꺼지지 않도록 아무것도 하지 않음
}