Prosto유니티에서 화면에 클릭 혹은 터치를 주는 경우 UI로 구성된 부분을 클릭해도 UI 버튼 처리와 클릭 처리를 같이해주게 됩니다. 이때, UI를 클릭(터치)하는 경우에는 게임 화면을 클릭한 처리에서 제외해주고 싶다면 이 글에서 소개하는 내용을 보시면 됩니다. 게임에서 UI 부분을 눌렀더니 점프를 한다? (점프하면 안 되는데... 이런 경우에는?) 이런 경우 터치 혹은 클릭된 부분이 게임 화면인지, 아니면 UI인지 확인하여 처리해주면 됩니다. 그 기능을 사용하기 위해선 먼저 클릭/터치 처리하는 해당 스크립트에 추가로 using해줍니다. using UnityEngine.EventSystems; //UI 클릭시 터치 이벤트 발생 방지. (여기서 EventSystems를 사용하기 위해선 일단 UI는 만들었어야 합니다. 그때 아래와 같이 자동으로 Hierarchy 패널에 EventSystem이 추가되니까요.) 다음으로 클릭하는 부분에서도 처리를 해줘야겠죠? if ((Input.GetMouseButtonDown(0))) //버튼을 누름. } 'EventSystem.current.IsPointerOverGameObject() == false' 확인을 Input을 받은 후에 하든, 받기 전에 하든 순서는 관계 없습니다. 그저 현재 포인트가 어디에 있는지 확인하는 거니까요. (UI 중 어떤 것이라도(텍스트라도) Raycast Target이 켜져있다면 게임 클릭에서 제외하여 UI만의 세계가 되는 겁니다.) 이벤트(Click On 등)와도 관계 없고, Raycast Target와 관계가 있는 겁니다. (반대로 얘기하면 UI에서 이 Raycast Target이 꺼져있다면 UI 위를 클릭해도 게임 내 해당 좌표를 클릭한 효과를 주는거죠.) 그렇다면 터치에서는 어떻게 적용할까요? 일단 using UnityEngine.EventSystems; //UI 클릭시 터치 이벤트 발생 방지. 여기는 똑같이 사용합니다. 그렇지만, 클릭과 터치 처리 자체가 다르니.. 살짝 다르겠죠? 예제 코드를 보여드리겠습니다. if (Input.touchCount > 0) { //터치가 1개 이상이면. 터치를 사용할줄 알고있다면, 어떤 부분에서 처리해줘야하는지 아시겠죠? EventSystem.current.IsPointerOverGameObject (i) == false 이렇게 다른 부분이라고는 터치 번호가 들어가는 i뿐 입니다. 현재 터치되고 있는 번호에 맞게 검사하는 거죠. 이렇게 처리해주고 실행하면 UI와 게임 내 터치가 구분되어집니다. (아까 얘기했지만, EventSystem은 있어야 합니다..) 궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 ) TagUI 제외, UI 클릭, UI 터치, unity, 따로, 버튼 제외, 유니티, 유니티 2D, 유니티 3D, 클릭, 터치 공유하기 링크 |