오늘부터 챕터3 개인과제가 시작됐다.
여러가지의 간단한 구현과제가 포함되어있는데 나는 Pawn을 부모클래스로하는 Playable Character 구현을 먼저 시작했다.
과제의 의도 자체가 Charcter 클래스가 Pawn을 상속받아서 만들어지기 때문에 내부구현을 이해하라는 뜻인 것 같다.
ACharacter는 CharacterMovementComponent가 붙어있는데 Pawn은 UFloatingPawnMovement를 만들거나 직접 이동시켜야한다.
그래서 CharacterMovementComponent가 제공해주는 다양한 변수를 직접 선언해줘야하는 문제가 있다.
CharacterMovementComponent는 높이가 낮은 액터(돌맹이, 계단 등)는 자동으로 올라가도록 되어있는데
APawn + AddActorWorldOffset은 충돌시 그냥 멈춰버린다
그래서 Tick에서 직접 구현해야한다.
Jump()StopJumping()IsFalling()ACharacter는 CharacterMovementComponent가 바닥, 낙하, 착지, 경사면을 모두 관리해주는데
APawn은
IsOnGrounded()LineTraceSingleChannel()HitResultVerticalVelocity <= 0ACharacter는
bOrientRotationToMovementUseControllerRotationYawRotationRateAPawn은 마우스회전, 카메라회전, 매시 회전을 전부 직접 처리해야한다.
ACharacter는 Controller Yaw 기준으로 AddMovementInput()을 사용하면 자연스럽게 처리된다.
근데 APawn을 쓰니까
SpringArm->GetComponentRotation();
FRotationMatrix(YawOnlyRotation);
// 앞, 오른쪽 계산
AddActorWorldOffset() 사용