1인 개발 게임 (Unity)/UNITY

[Unity] 뒷 배경의 오브젝트 터치가 자꾸 감지될 때 , 뒤의 오브젝트가 터치될 때 , ui 뒤가 터치안되게 하는 방법, ui 뒤가 터치안되게

Z46 2025. 5. 26. 11:49

뒷 배경의 오브젝트 터치가 유니티에서 자꾸 감지가 될 때가 있습니다. 

뒤의 오브젝트가 터치되어 버리면 안되는 경우가 있는데도 말입니다 ㅠㅠ 

어떨 때일까요?

예를들어, 어떤 드래그 처리를 잘못했을 때 잘못했다는 UI를 뜨게 하고 싶은데 그 작은 대화창을 터치했더니 그 뒤의 게임 오브젝트 터치로 다시 감지되어 무한 작은 대화창 UI가 열리는 경우입니다. 물론 그 뒤의 오브젝트가 작으면 그럴 가능성이 줄어들겠지만 그래도 최대한 게임에서 버그가 없는 게 좋잖아요? 

저는 이상하게.. 그 작은 대화창 UI에 panel을 깔고, block raycast를 true로 하고, ignore parents 까지 해도 감지가 되더라구요. 그래서 그냥 코드로 처리했습니다. 

 

// 드래그 시작 포인트 얻기
                Vector2 touchPos = isTouching ? Input.GetTouch(0).position : (Vector2)Input.mousePosition;


PointerEventData eventData = new PointerEventData(EventSystem.current);
        eventData.position = touchPos;
        List<RaycastResult> results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(eventData, results);
        
        // UI 레이어인 오브젝트가 있으면 드래그 처리 안 함
        foreach (RaycastResult result in results)
        {
            Debug.Log($"[SingleDrag] 레이캐스트 결과: {result.gameObject.name}, 레이어: {LayerMask.LayerToName(result.gameObject.layer)}");
            if (result.gameObject.layer == LayerMask.NameToLayer("UI"))
                    {
                        return;
                    }
        }

 

이런 식으로 코드를 '터치가 감지되는 아이의 스크립트' 터치판정 내부에 적어주면 됩니다!

 

그다음에 감지되지 않게 하고 싶은 것 (대부분 ui)의 레이어 설정을 ui로 바꿔주세요. 

 

이상 간단하게 ui 뒤가 터치안되게 하는 방법이었습니다. 안녕~