1. 개요
캐릭터를 회전하기 위해서는 다양한 요소들이 영향을 줄 수 있다.
오늘은 캐릭터 회전에 대해 살펴보자
2. 캐릭터 회전 5가지 요소
캐릭터 회전에 영향을 주는 요소들은 아래와 같다.
- PlayerController
- Pawn
- SpringArm
- Camera
- CharacterMovement
오늘은 CharacterMovement를 제외한 총 4가지를 살펴본다.
3. 캐릭터 회전 구현
1. 회전하고자 하는 값으로 덮어쓴다.
간단하게 머리 속으로 캐릭터 회전을 구현해 본다면 아래 2가지 요소가 필요하다.
- Rotation : 캐릭터의 현재 회전 값
- Desired Rotation : 회전하고자 하는 값 (원하는 회전 방향)
그리고 회전 방법은 간단히 Rotation을 Desired Rotation으로 덮어쓰는 것이다.
하지만 덮어쓰는 방법은 한 가지 문제가 있다.
캐릭터가 해당 방향으로 바로 회전하면서 시각적으로 부자연스러움이 발생한다
2. 회전하고자 하는 값으로 Rotation Rate만큼 회전한다.
갑자기 회전하는 부자연스러움을 해결하기 위해 RotationRate값을 만든다.
RotationRate는 회전하고자 하는 값으로 이동할 때 어느 정도 회전할 것인지 그 비율을 설정한 값이다.
그리고 매 프레임마다 해당 회전 방향으로 RoationRate(속력)만큼 조금씩 회전하게 되면 자연스럽게 회전할 거이다.
4. PlayerController 회전
PlayerController 클래스에서 회전값을 적용하기 위해 아래 함수를 사용한다.
- AddControllerYawInput
- AddControllerPitchInput
- AddControllerRollInput
위 함수들 중 AddControllerYawInput 값은 아래와 같이 계산된다.
RotationInput.Yaw += !IsLookInputIgnored() ? Val * (GetDefault<UInputSettings>()->bEnableLegacyInputScales ? InputYawScale_DEPRECATED : 1.0f) : 0.0f;
간단히 말해서 입력값(Val)에 엔진 설정 파일에서 지정된 스케일(InputYawScale_DEPRECATED)만큼 곱하여
컨트롤러 회전 값이 설정된다.
정리하면
- 입력에 따른 컨트롤러의 회전은 위 함수를 통해 제어한다.
- 컨트롤러의 회전 값은 입력값(Val)과 엔진 설정 값(InputYawScale_DEPRECATED)에 의해 변경된다.
5. Pawn 회전
폰의 회전 설정은 아래와 같다.
- 폰은 Actor를 상속함으로 Actor의 회전 함수를 사용하여 제어할 수 있다.
- 폰은 PlayerController의 빙의 대상이며 동시에 회전 값에 동기화할 수 있다.

Pawn의 옵션 중 위 속성들을 체크하면 PlayerController의 회전값과 폰의 회전값이 동기화된다.
6. SpringArm
SPringArm은 소유 폰의 빙의한 PlayerController의 회전 값에 동기화할 수 있다.

- UsePawnControlRotation을 설정하면 동기화된다.
- Inherit Pitch, Yaw, Roll은 부모의 Pitch, Yaw, Roll값을 상속한다. (부모의 회전값이 변하면 같이 변하게 된다.)
7. Camera
Camera 또한 소유 폰의 빙의한 PlayerController의 회전 값에 동기화할 수 있다.

- UsePawnControlRotaion을 설정하면 동기화된다.
'Unrael > Basic' 카테고리의 다른 글
| [UE/Basic] 데이터 테이블 (0) | 2025.02.07 |
|---|---|
| [UE/Basic] 콜리전 (Collision) (0) | 2025.02.04 |
| [UE/Basic] 입력 트리거 (0) | 2025.01.27 |
| [UE/Basic] 자료구조 - TSet (0) | 2025.01.24 |
| [UE/Basic] 직렬화 (Serialization) (1) | 2025.01.23 |