개발 · 컴퓨터공학/three.js / / 2024. 8. 17. 09:00

three.js raycast gui 무시하기 - ignore gui [Threejs Cloth Tailor 개발일지]

728x90
반응형

    이전 포스팅 보러가기    

 

three.js attach id list 전달하기, attachIdList로 new edge 정보 만들기, set index, constraint edge 추가하기, distan

attach id list 전달하기attach id list를 attach_vertex mode에서 전달할 수 있게 만들고 나서 테스트를 하는데 안된다.이유를 디버깅 해보다가 이제서야 깨달았는데, 사용자가 선택

like-grapejuice.tistory.com

 

 

현재 상황

여러 기능들이 겹치고 그에 비해 사전 설계없이 닥치는대로 남는 시간에 급하게 개발하다보니, 충돌하는 기능들이 종종 생긴다.

 

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 이벤트를 무시하도록 설정하였다. 

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유