IA, IMC setting후 Character Class에 움직임과 화면 회전 함수 구현하기
void RyanCharacterPlayer::Move(const FInputActionValue& Value){
FVector2D = MovementVector = Value.Get<FVector2D>();
// 헷갈리게도 FVector()는 X,Y,Z가 순서대로 들어가지만 FRotater() 같은 경우는 Y,Z,X 순서로 input 값이 들어가게 된다.
// 단순히 Character의 Forward, Right Vector를 뽑아서 거기에 입력값을 추가하지 않는 이유는 우리는 Move를 통해 캐릭터가 Controller의 앞, 오른쪽을 기준으로 움직이고 싶기 때문이다!
const FRotater = Controller->GetControlRotation();
const FRotater = YawRotation(0,Rotation.Yaw,0);
const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(ForwardDirection, MovementVector.X);
AddMovementInput(RightDirection, MovementVector.Y);
}
void RyanCharacterPlayer::Look(const FInputActionValue& Value){
FVector2D LookAxisVector = Value.Get<FVector2D>();
// 결국 이 함수가 타고타고해서 바꾸는 값은 ControlRotation이라는 변수의 값
// 이미 IMC modifier쪽에서 한번 swizzle을 주었기 때문에 X가 Z축 회전, Y가 Pitch 회전이 된다.
AddControllerYawInput(LookAxisVector.X);
AddControllerPitchInput(LookAxisVector.Y);
}
보통 회전을 줄때 현재 회전 상태(Rotation)에서 회전하고 싶은 상태(Desired Rotation)으로 가야한다. 하지만, 여기서 순식간에 꺾어버리면 부자연스러움으로 일정한 각속도로 회전하게 만든다.
이 기능은 정말 대박이다. UPROPERTY로 지정된 값은 우리가 직접 확인할 수 있다고 하는데 지금까지 Pawn의 rotation과 Controller의 rotation의 관계가 계속 헷갈렸던 것을 단번에 해결해 주었다. 보는 방법은,
Viewpoet에서 level 재생버튼을 실행시킨다음에 shift+F1을 통해 빠져나온다. 그 다음에, ~을 눌러서 cmd를 키고 아래와 같은 command를 입력한다.
DisplayAll PlayerController ControlRotation
BP에서 Pawn 회전 detail panel에 들어가면 아래와 같은 속성을 볼 수 있다.
Use Controller Rotation Pitch
Use Controller Rotation Yaw
Use Controller Rotation Roll
기본 setting은 해제가 되어있는데 만약 체크를 한다면 Controller의 위치에 따라 Pawn도 회전을 할 것이다. (Pawn의 얼굴을 볼 수 없겠지..)
Camera Boom detail panel에서는 아래와 같은 항목을 볼 수 있다.
Use Pawn Control Rotation
여기서는 Pawn과 다르게 보통 체크 되어있는데, 이러면 Controller 방향이 곧 카메라 arm의 방향이 된다.