Unity : 마우스클릭을 3D공간 좌표로 이용해 보았다
과제하다가 문득 이방법이 여러 사람들에게 필요할 수도 있다 생각하여 오늘도 포스팅을 한다.
일단 내가 만든 것은
대충 이런형식의 TopView 게임이다.
이동은 WASD로 하는데, 무기 발사는 마우스를 클릭하면 마우스를 클릭한 쪽으로 발포한다.
당연히 클릭이 되는 시점은 Canvas좌표일거고, 적용되려면 3D공간의 좌표로 변환이 되어야 한다.
이걸 어떻게 한담?
수업자료를 토대로 열심히 박치기하여 나름의 해결방법을 알아냈다.
서론 끝! 이제부터 본론 들어간다.
카메라시점에서 카메라의 모든점은 3D공간의 하나의 선에 대응된다
왜냐구?
점이 계속 쭉쭉 진행하면 선이니까.
따라서
카메라에서 마우스가 찍힌 점으로 레이(Ray)를 발사하면 그 광선이 맨처음에 어느 오브젝트 어느 부분에 맞았는지, 좌표를 알 수 있다는 것이다.
코드로는 이렇게 쓴다.
Raycast의 두번째 파라미터 out hit는 RaycastHit 클래스를 할당해주면 된다.(사실 메소드에 마우스 대보면 다 나오는 내용이다.)
자 그럼 이방향으로 총을 쏘면 되지 않나?! 어떻게 보면 맞다.
하지만 내가 만드는 것은 탑뷰.
분명 Ray가 맞은 곳은 대부분 바닥일 터.
바닥으로 총알을 향하게 할 수 는 없다.
먼저 히트포인트를 쳐다보게 한 뒤, 기울어진 만큼 x,z의 값을 조정하여 총알의 발사각도가 최대한 지면과 수평을 이루게 보정을 했다.
사실 이렇게 해도 x와 z의 Rotation 값이 0이 되지않는데 미세하게나마 0에 가깝게 보정은 된다.
(이유를 모르는 나는 공부가 더 필요하다는 뜻)
이렇게 하니.
얼추 그래도 멀리 날아간다. (원근법때문에 바닥으로 떨어지는것처럼 보이는거라고 믿고싶다)
오늘도 난 부족한 사람이다 라는것을 느끼며
이만 빠잉!