Pawn 클래스를 키보드, 마우스로 조종하는 과제에 대한 해설 코드를 보고 이동에 관한 부분을 정리하였다
기본적으로 키보드 입력으로 들어오는 값(벡터)는 항상 World 기준 x축(w,s), y축(d,a), z축(shift, space bar)이기 때문에 이 값을 현재 캐릭터에 맞게 변환하지 않으면 w 키를 눌러서 앞으로 갈려고 할 때 앞으로 가지 않고 왼쪽이나 다른 방향으로 갈 수가 있다
이를 방지하려면 키보드 입력 값을 캐릭터가 보는 방향으로 회전시켜야 한다
위 코드는 캐릭터를 World 기준으로 이동시켜야하는 방향을 구하는 부분이다
코드에서 주요 코드가
FRotationMatrix(YawOnlyRotation).GetUnitAxis(EAxis::X)
YawOnlyRotation.RotateVector(Vector)
GetActorForwardVector()
시리즈
이렇게 3가지이다
FRotationMatrix(YawOnlyRotation).GetUnitAxis(EAxis::X)
: YawOnlyRotation인 상태에서의 X축 방향 단위 벡터를 반환한다YawOnlyRotation.RotateVector(Vector)
: Vector를 YawOnlyRotation만큼 회전시켜 새로운 Vector를 반환GetActorForwardVector()
: 현재 Actor의 정면 벡터를 반환하는데, 내부적으로 GetForwardVector()를 호출 FRotationMatrix(YawOnlyRotation).GetUnitAxis(EAxis::X)
와 같은 동작을 함=> 결국 세가지 코드 모두 같은 동작을 한다
대신 무엇을 기준으로 이동을 할 것인지에 따라 셋 중 적절한 것을 선택해서 사용하면 될 것 같다.
실제로 저 코드가 같은 값을 반환하는지 비교해보았다
![]() | ![]() |
---|
![]() | ![]() |
---|
MovementInput의 X, Y는 IMC에서 IA을 키보드 Key에 매핑할 때 Modifiers의 Swizzle Input Axis Values를 어떻게 하느냐에 따라 달라짐
위 코드에서의 IMC 세팅
다른 프로젝트에서의 IMC 세팅