1. Input - Axis Mappings에 마우스 추가
Project Settings에 Axis Mappings에 아래 두 값을 넣어줍니다.
- LookUp: 위아래 시야
- Turn: 좌우 시야
2. 코드
UE5에서는 회전을 Yaw, Pitch, Roll로 표현하고 있습니다.
유니티 하다 UE5로 왔을 때 이게 너무 어려웠다..
왜 이런 이름을 썼나 했는데 아마 비행 쪽에서 쓰는 용어를 그대로 들고 와서 그런 것 같습니다.
위키피디아에 Yaw Ptich Roll 관련으로 Aircraft 설명 글이 있는데 이와 동일한 내용으로 적용되고 있으니 참고하셔도 좋을 것 같습니다.
Aircraft principal axes - Wikipedia
간단하게 정리하자면 아래와 같습니다.
- Roll: X축 회전
- Ptich: Y축 회전
- Yaw: Z 축 회전
Transform에서 Rotation 값에 마우스 포인터를 갖다 대면 각 축의 의미를 바로 확인할 수 있으니 이렇게 확인해도 됩니다.
이를 인지하고 코드를 구현하면 아래와 같이 작성할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// header file
UCLASS()
class TPS_PROTOTYPE_API APlayerCharacter : public ACharacter
{
GENERATED_BODY()
protected:
void LookUp(float); // LookUp 메서드 추가
void Turn(float); // Turn 메서드 추가
public:
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// CPP 파일
void APlayerCharacter::LookUp(float AxisValue)
{
AddControllerPitchInput(AxisValue);
}
void APlayerCharacter::Turn(float AxisValue)
{
AddControllerYawInput(AxisValue);
}
// Called to bind functionality to input
void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("LookUp", this, &APlayerCharacter::LookUp);
PlayerInputComponent->BindAxis("Turn", this, &APlayerCharacter::Turn);
}
AddControllerPitchInput(AxisValue), AddControllerYawInput(float AxisValue)은 AxisValue 값을 통해서
각 회전축에 해당하는 값을 더해주는 메서드입니다.
3. 코드 작성 결과
코드를 작성하고 돌려보면 이상한 점을 확인할 수 있는데 좌, 우 시야 이동을 잘 되지만 위, 아래 시야 이동은 되지 않습니다.
4. 위, 아래 시야 이동 안 되는 오류 수정
위, 아래 시야 이동이 되지 않는 이유는
Spring Arm 컴포넌트 중 폰 제어 회전 사용(use Pawn Control Rotation) 값이 false 이기 때문입니다.
이 값을 true로 바꿔주면 LookUp이 제대로 활성화되는 것을 볼 수 있습니다.
5. 코드 추가
위에서 확인한 내용들은 코드로 추가해줍니다.
1
2
3
4
5
6
7
APlayerCharacter::APlayerCharacter()
{
_springArm->bUsePawnControlRotation = true;
_springArm->bInheritPitch = true;
_springArm->bInheritRoll = true;
_springArm->bInheritYaw = true;
}