본문 바로가기
Unity

[Unity3D] UI 제외하고 터치하기

by Aducssini 2019. 6. 27.

UI 만들다보면 

UI와 게임씬에 반응이 같이 될때가 있다. 

 

아마도 입력 방식이 달라서 서로 다르게 받아들여서 그런것같기는 한데. 

 

(아마 인게임은 Raycast 나 mouseButtonDown 같은 거일테고, 

 UI는 EventSystem에서 따로 받으니까)

 

그래서 UI를 터치할때는 인게임을 제외하고 싶을 때가 있다. 

그때 쓰는 함수. 

 

1
2
3
4
if (EventSystem.current.IsPointerOverGameObject() == false)
{
    Debug.Log("This is the way");
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter
 

사실 이건

함수 이름에서도 알수 있듯이.  

Ui에 올라가지 않을때 

 

실행하는 함수다. 

 

UI에 올라간것만 처리하는 거라면. 

UI에서 이벤트를 받으니 신경쓸것없고 UI 오브젝트 위가 아니라면 

실행된다. 

 

참고로 

UI에서는 따로 클릭 이벤트를 받는데. 

받는 부분은 애초에 정해져있고. 

Raycast Target에서 받는다.

Raycast Target 에서 받는다. 

 

 

추가// 

 

 

휴대폰(IPhone X)에서 확인했더니, 전혀 작동하지 않았다; 

유니티 상에서는 문제없이 됬는데?

 

그래서 찾아본 결과 

 

EventSystem.current.IsPointerOverGameObject() 함수가 파라메터(int)를 받는다! 

 

1
2
3
4
5
6
7
8
9
10
11
12
int pointerID;
 
#if UNITY_EDITOR
        pointerID = -1//PC나 유니티 상에서는 -1
#elif UNITY_IOS || UNITY_IPHONE
        pointerID = 0;  // 휴대폰이나 이외에서 터치 상에서는 0 
#endif
 
if (EventSystem.current.IsPointerOverGameObject(pointerID) == false)
{
    //UI 상에서 클릭하지 않았을 때, 함수
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

확인 결과 작동 잘된다.