본문 바로가기

Unity/Knowledge

조준(Aim) 시스템 구축

마우스를 바라보는 방향으로 무기를 조준해보기

 

[ 쿼터니언(Quaternion) ]

유니티 인스펙터 창에서 나오는 회전은 Vector3로 표현되며, 이를 오일러각(Euler Angle) 이라고 한다

하지만, 시중의 많은 3D 소프트웨어는 내부적으로 쿼터니언을 사용

쿼터니언을 사용할 시 짐벌 락(Gimbal Lock) 문제를 피할 수 있음

짐벌락 ㅡ> 극단적인 각도로 회전할 경우 한 축으로의 회전을 잃어버리는 것

https://youtu.be/yxMQKsab5TQ?si=mbRGEn3Gtn429ntB

수학적으로는 4차원 복소수를 이용한 회전 표현으로 (x, y, z, w) 형태로 표현

직접 x, y, z, w값을 조정하지 말 것

직접 값을 변경하거나 계산하는 대신, Unity의 내장 함수를 사용하는 것이 좋다.

(예: Quaternion.Euler, Quaternion.LookRotation, Quaternion.Slerp 등)

쿼터니언은 애초에 직관적인 수체계를 사용하지 않는다.

직접 값을 적용하려면,

Quaternion.Identity (회전이 없는 상태를 나타내는 쿼터니언만 사용)

 

 

[ 쿼터니언과 함께 사용하는 주요 메소드 ]

 

Quaternion.Euler(0f, 0f, 90f) 에서

90f 는 디그리를 표현하는 것으로, 일반적으론 라디안을 더 많이 사용

 

Quaternion.LookRotation 은 3D에서 사용하며

우리가 때때로 해드 뱅잉을 하고 싶은 것 처럼 부분회전을 생각

 

 

[ 삼각 함수 및 아크 탄젠트 ]

삼각함수  ㅡ  각도를 통해서 비율 및 좌표를 알아내기 위한 함수 

아크탄젠트  ㅡ  비율 및 좌표를 통해서 각도를 알아내기 위한 함수

 

초기에는 x ,y 가 둘다 양수 or 음수인 상황 때문에 아크탄젠트로는 180도 각도 범위에서만 알아낼 수 있었다

그래서 개발자들이 이를 개선하기 위하여 한 가지를 더 추가를 하게 되는데

x, y 각각의 좌표가 양수인지 음수인지 판별하도록 해서 360도를 다 구분해낼 수 있게 되었다.

 

이러한 구현을 개발자들은 Atan2라고 이름 붙이고,

밑변 / 높이였던 탄젠트의 기본 개념을 적용해 y, x 순으로 인수를 넣는다.

이를 통해 점 (x, y)에서, Math.Atan2(y, x) 함수를 사용하여

벡터가 x 축과 이루는 각도를 [-π, π] 까지의 값으로 얻을 수 있다.

 

Atan2를 활용해서 객체가 특정 방향을 향하도록 만들거나 두 점 사이의 각도를 계산할 때 유용

 

ex > 몬스터가 90도 범위의 시야각을 가지고 있을 때, 어떻게 이런 기능을 구현할 수 있는가?

answer > 캐릭터와 몬스터 사이의 거리에 Atan2를 통해 각도를 재서 -45도~45도 사이에 있는지 확인

 

 

[ 마우스를 따라 회전하는 무기 만들기 ]

=

'Unity > Knowledge' 카테고리의 다른 글

Prefes와 Static 차이점  (0) 2024.05.12
공격 시스템 구축  (0) 2024.05.10
충돌 처리와 맵 구성  (0) 2024.05.09
구조와 설계 샘플  (0) 2024.05.09
핵심 기능 소개  (0) 2024.05.08