해결된 질문
작성
·
130
1
안녕하세요 교수님.
교수님께서 만들어주시는 양질의 강의에 언제나 많은 배움을 얻게 되어 감사드립니다.
강의를 듣던 도중 궁금한 점이 생겨 이렇게 질문을 작성하게 되었습니다.
ShoulderLook()에서 플레이어 컨트롤러의 로테이션 Yaw값과 Pitch값을 더하는 것은 알게 되었지만,
다음의 코드들이 작동하는 원리를 자세히 이해하지 못한 것 같습니다.
특히 이 코드들이 작동하는 수학적 원리가 어떻게 되는지 알고 싶습니다.
추가적으로 위의 코드들이
Quater 뷰와 Shoulder 뷰를 구현하는 최선의 방법인지,
다른 더 간소화할 수 있는 방법이 있다면 무엇인지 알려주시면 감사하겠습니다.
다시 한번 좋은 강의를 만들어주셔서 감사합니다.
답변 1
1
수학적 원리에 대해서는 "이득우의 게임수학"책을 참고해보시는게 좋을 것 같습니다.
첫 번째 그림을 간단하게 설명하면, 오일러 각으로 표현된 YawRotation 회전 정보를 회전 행렬에 넣습니다.
그러면 회전 행렬로부터 해당 회전을 표현하는 3개의 기저축을 가져올 수 있는데, 앞 방향(기저 X축)과 우측 방향(기저 Y축)을 가져와서 최종 방향 벡터로 변환하는 작업을 코드로 구현했습니다.
두 번째 그림은 X축과 Y축의 키를 동시에 누를 때 입력의 크기는 1보다 큰 루트2(1.414..)가 됩니다. 따라서 대각선으로 이동시 상하나 좌우보다 더 빨리 이동하는 현상이 발생할 수 있으므로, 크기를 1로 고정시켜준 것입니다. 1보다 큰지 파악하기 위해 가급적이면 연산량이 많은 제곱근(Sqrt)함수를 사용하지 않도록 처리했습니다.
예제는 학습을 위해 최대한 단순하게 구성했으므로, 이것이 최선이라고 이야기할 수는 없습니다.
입력 컨트롤에 대한 구체적인 기획이 나와 구현 방법이 정해지면, 이에 따라 최선의 구현 방법이 달라지므로 정답은 없는 문제라고 생각합니다. 의외로 간단해 보이는 기능도 실제 구현 단계로 들어가면 꽤나 복잡하게 파고들어야 할 수 있습니다.
레퍼런스 게임을 많이 해보시면서 해당 게임의 개발자들은 어떻게 구현했을지 스스로 고민하고, 최대한 비슷하게 흉내내시는 것을 추천합니다.
수학과 관련된 부분을 많이 배운다면
기획에 따라 다양하게 달라질 수 있는 설계에 더 잘 대응할 수 있을 것 같습니다.
자세한 설명 감사드립니다.
말씀하신 책을 한번 구매해 읽어봐야겠습니다.