예지의 개발 로그포스 (Yeji's Log Force)

[Unity][HandiLab] 화면터치와 UI터치 구별하기 본문

[Unity] Projects & Study/HandiLab - AR 과학 실험

[Unity][HandiLab] 화면터치와 UI터치 구별하기

Yeji Heo 2022. 7. 7. 11:37

우리 앱에서 실험을 처음 시작할 때 평면 인식 후 화면을 한번 터치하여 책상을 배치한다.

그런데 책상을 배치하려고 터치한 것이 아니라, 일시 정지하고 싶어서 좌측 상단의 정지 버튼을 누른 경우라면?

책상 배치와 정지 패널 활성화가 같이 이루어진다.

정지버튼을 터치한 것 / 책상배치를 위해 화면을 터치한 것을 구별하고 싶은데, 그렇지 못해서 두 동작이 동시에 일어나버리는 것.

 

이를 막기 위해서

EventSystem.current.IsPointerOverGameObject()

를 사용하면 된다. 터치한 부분이 UI이면 True, 아니면 False를 반환한다고 한다.

 void Update()
    {
        if (spawnedObject == null && placementPoseIsValid && Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
        {
            if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
                return;
            else
            {
                ARPlaceObject();
                objectGuide.SetActive(false);
            }
        }

        UpdatePlacementPose();
        UpdatePlacementIndicator();
    }

이 부분은 책상을 터치하면 평면에 배치하는 부분이다.

사용자 터치가 들어와서 ARPlaceObject();가 호출되면  실험프리팹을 카메라 화면상에 Spawn 한다.

 

여기에 위 메서드를 적용한 조건문을 추가하여

UI 터치이면 return 하고, 그렇지 않을 경우에만 ARPlaceObject()를 호출하도록 코드를 수정해주었다.

Comments