↓ ↓ 이전 포스팅 보러가기 ↓ ↓
현재 상황
여러 기능들이 겹치고 그에 비해 사전 설계없이 닥치는대로 남는 시간에 급하게 개발하다보니, 충돌하는 기능들이 종종 생긴다.
vertex remove를 통해서 마네킹 모델을 지우지 않으려고 raycast 코드를 수정하고 나니,
raycast 가 수정된건지
gui raycast 클릭 중복 현상
attach gizmo는 빨간색을 시작으로 파란색을 클릭하면 연결되는데,
처음부터 파란색이 나오네.
좀 보다보니 원인을 알았다. gui의 터치인식이 문제였다.
gui로 클릭한 raycast가 뒤에 cloth object가 있으면 attach gizmo의 status가 바뀌는 것이었다.
unity에도 UI와 raycast를 동시에 사용하다보면 이런 중복클릭 문제가 발생하는데,
문제는 gui는 raycast와 상관되지 않는다는 것.
gui를 클릭하게되면 raycast를 사용하지 않도록 해야한다. 마우스의 현재위치가 gui 위에 있다는 것을 체크할 수 없을까?
mouse gui hover 체크 (ignore gui, gui 무시하기)
const elementUnderMouse = document.elementFromPoint(mouse.x, mouse.y);
console.log(elementUnderMouse)
gui는 결국 dom 형태로 간단히 생성한 것이므로 mouse 위치로부터 document element를 검출하는 방법으로 가능하다.
gui가 없는 곳을 클릭하면 null, gui를 누르면 DOM element를 가져온다.
이 방법이면 가능할 것 같다.
근데.. 좀 테스트 해보니까 다른 곳을 눌러도 DOM element를 가져오는 것 같다.
const elementUnderMouse = document.elementFromPoint(event.x, event.y);
console.log(elementUnderMouse)
코드를 좀 바꾸었다. 아까는 mouse기반으로 -1~1로 정규화한 값을 사용해서 element를 잘못 검출했던 모양이다.
event의 x,y 좌표로 하면 정상적으로 동작한다.
이렇게하여 gui 위를 클릭하면 raycast 이벤트를 무시하도록 설정하였다.