Today, I will

[Unreal] 캐릭터 이동시 view 회전값 조정 본문

Unreal

[Unreal] 캐릭터 이동시 view 회전값 조정

Lv.Forest 2024. 1. 4. 08:26

게임마다 설정은 달리할 수 있지만 일반적인 3d게임은 키보드로 이동을 결정하고 마우스로 view 회전을 결정한다.

 

플레이어 이동시 키보드 이동과 마우스 회전에 따라 캐릭터와 관련 컴포넌트들(카메라 포함)을 어떻게 결정할 지에 따라 플레이 view가 달라진다.

 

캐릭터 컨트롤러가 입력값에 따라 어디로 회전하고 싶다는 의지가 있을 것이고

폰, 카메라봉(springArm) 등도 차례 차례 회전의지에 어떻게 인터랙션할 것인지 결정해주어야 한다.

 

즉, 마우스 및 키보드 입력에 따라 폰(캐릭터)이 움직일 때 어떤 View를 구현하고 싶은지에 따라 캐릭터(폰) 및 아래 컴포넌트들의 회전값을 잘 설계해야 한다.

 

쿼터뷰에서는 카메라봉을 높이 띄워놓고 플레이어 의지에 따라 카메라봉이 회전하지 않지만 백뷰에서는 캐릭터와 같이 카메라봉이 회전해야 한다.

 

bUseControllerRotationPitch

ControlRotation이 Pawn의 회전과 동기화할지 말지를 결정한다.

bUseControllerRotationPitch = false;
bUseControllerRotationYaw = false;
bUseControllerRotationRoll = false;

SpringArmComponent->bUsePawnControlRotation

true면 Pawn의 회전이 SpringArm의 회전 동기화.

카메라봉이 이동 및 입력 의지를 따라다닐 것인지 독립적일지를 결정해야 한다.

BackView

SpringArmComponent->TargetArmLength = 400.f;
SpringArmComponent->SetRelativeRotation(FRotator::ZeroRotator);

SpringArmComponent->bUsePawnControlRotation = true; // 컨트롤의지 회전값(마우스목표) == 스프링암 회전값.
SpringArmComponent->bDoCollisionTest = true;
SpringArmComponent->bInheritPitch = true;
SpringArmComponent->bInheritYaw = true;
SpringArmComponent->bInheritRoll = false;

QuarterView

SpringArmComponent->TargetArmLength = 900.f;
SpringArmComponent->SetRelativeRotation(FRotator(-45.f, 0.f, 0.f));

// 카메라 봉이 움직이지 않음
SpringArmComponent->bUsePawnControlRotation = false;
SpringArmComponent->bDoCollisionTest = false;
SpringArmComponent->bInheritPitch = false;
SpringArmComponent->bInheritYaw = false;
SpringArmComponent->bInheritRoll = false;