오늘은 객체의 방향을 변화시키는 행위를 의미하는 회전의 개념에 대해 정리해보겠습니다.
오일러각은 가장 흔히 사용하는 회전 방식입니다. X, Y, Z 축을 기준으로 몇도를 돌릴지 결정합니다.
일상생활에 사용되는 만큼 이해하기 쉽고 직관적입니다. 인스펙터 창에서 직접 숫자를 입력해 조작하기가 쉽습니다.
비행기의 회전으로 비유하자면 아래와 같습니다.

Pitch (X축): 비행기의 코가 위/아래로 움직이는 회전입니다.
Yaw (Y축): 비행기의 코가 좌/우로 돌아가는 회전입니다.
Roll (Z축): 비행기의 날개가 양옆으로 기울어지는 회전입니다.
오일러 각을 사용하여 3차원 공간에서 물체를 회전시킬 때, 세 개의 회전 축 중 두 개의 축이 겹쳐지면서 하나의 회전 자유도가 상실되는 짐벌락 현상이 발생할 수 있기 때문에 유의해야합니다.
쿼터니언은 짐벌락 문제를 해결하기 위해 사용하는 회전 방식입니다.
4개의 숫자(x, y, z, w)로 회전 상태를 나타내며, 복잡한 회전 연산에 필수적으로 사용됩니다.
다만 4개의 숫자로 어떤 회전상태인지 한눈에 파악하기 어렵다는 특징이 있습니다.
회전 각도를 제어할 때 360도가 넘어가면 다시 0으로 돌아오도록 하는 순환 처리가 필요합니다.
이때 사용하는 것이 Repeat입니다.
public static float Repeat(float t, float length);
Mathf.Repeat(t, length);
특징
C# % 연산자와의 차이
%연산자는 피연산자가 음수일 때 결과값도 음수를 반환하지만 Mathf.Repeat는 값의 증감 방향과 무관하게 항상 양수의 순환 범위를 유지한다는 차이가 있습니다.
Mathf.Repeat는 각도 정규화나 연속적인 시간 & 애니메이션 루프 그리고 무한 스크롤에서 사용됩니다.
코드로 회전을 구현할 때 게임에서 어떻게 표현할 것인가에 따라 사용해야하는 함수가 다릅니다.
Transform.Rotate(): 현재 회정 상태를 기준으로 얼마나 더 회전할지 결정하며, 자연스럽고 연속적인 회전 연출이 필요할 때 사용합니다.
Quaternion.Euler(): 입력한 각도를 쿼터니언으로 변환하여 즉각 방향을 대입하며, 특정 방향을 즉각적으로 바라보게하는 연출이 필요할 때 사용합니다.
오늘은 3D 공간의 물체를 회전시키는 방법에 대하여 학습하였습니다.
2D를 학습할 때는 회전에 대한 큰 고려없이 사용하였는데 3D로 넘어오면서 회전에 대하여 더 깊게 생각하는 것이 필요해진만큼 직접 적용해보면서 많이 이해할 필요성을 느꼈습니다.