본문 바로가기

Unreal/Udemy 강의

Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-10

벡터의 역방향 트랜스폼

이번엔 애니메이션의 회전을 적용시킬 차례이다.

이를 위해서 트랜스폼에 대한 이해도를 높힐 필요가 있다.

 

먼저 월드 좌표계와 로컬 좌표계가 존재하며, 월드 좌표계는 베이스가 월드의 중앙이고 로컬은 해당 액터가 중심이 된다.

따라서 위치는 상대적이게 되며 월드 좌표계를 기준으로 두면 월드의 중심에서 액터가 움직인 것이고, 

로컬 좌표계를 기준으로 두면 액터가 중심으로 월드의 베이스 위치가 달라지게 되는 것이다.

이러한 것이 글로벌 공간과 로컬 공간 간의 트랜스폼이 된다.

 

우리가 필요로 하는 것은 현재 플레이어의 각도이므로 로컬 좌표계의 각도가 필요한 것이다.

이는 기존의 Get Velocity 함수를 통해 얻은 속도를 이용하여 방향을 얻는 것이 가능하다.

해당 속도를 통해 어떤 방향으로 가는지, 얼마나 빨리 가는지를 알 수 있다.

이러한 속도는 월드에 있는 캐릭터를 얻고 해당 캐릭터의 속도를 구한 것이기 때문에 월드에 위치해 있는 것을 알 수 있다.

따라서 월드 -> 로컬을 통해 값을 구해야 한다.

 

우리는 기본적으로 월드 좌표계를 보고 있고, 이를 통해 트랜스폼을 하게 된다.

따라서 이 경우 로컬 -> 월드로의 트랜스폼이다.

지금은 월드 좌표계(속도 값)를 통해서 로컬 값을 얻으려고 하므로, 이 경우 역 트랜스폼(월드 -> 로컬)을 하게 된다.

역 트랜스폼은 Inverse transform 함수를 통해 구하는 것이 가능하다.

 

해당 함수는 Transform 값이 필요하므로 기존 월드의 Transform 값을 Get Actor Transform 함수를 통해 구하고, 방향은 Get Velocity 함수의 벡터 값을 넣어준다.

이를 토대로 얻은 벡터 값을 Rotation From X Vector 함수를 통해서 전방벡터의 값을 얻은후 Yaw에 해당하는 회전 값만 따로 리턴하여 각도에 할당해주면 된다.