[Unreal] 05.캐릭터 애니메이션
본 문서는 어소트락 언리얼엔진 게임프로그래머 양성과정의 강의를 토대로 필기한 내용입니다
캐릭터
캐릭터클래스
- 애니메이션
- 애니메이션 모드
- Use Animation Blueprint : 여러 애니메이션의 혼합 동작 가능하게 만들어 줄 수 있다 (Animation Blending)
- Use Animation Asset : 단일 애니메이션 에셋 사용
- Use Custom Mode : 만들어 진 애니메이션을 직접 커스텀해서 사용가능
- 애님 클래스
- 사용할 블루 프린트 클래스 정보가 필요
- 해당 애님 클래스를 기반으로 인스턴스를 생성하고 생성된 인스턴스의 스켈레탈 메쉬를 조종하는 방식
- 애니메이션 모드
애니메이션
- 애니메이션 시퀀스 : 낱개 애니메이션 동작
- C++ 클래스를 미리 PlayerAnimInstance 클래스로 만들고 블루프린트 클래스를 연결 해주는 방식으로 만들 수 있다
- 블렌드 스페이스
- Anim Settings : 가로 Dir / 세로 Speed
AimOffset: Aiming 상태일 때의 애니메이션- 기본 모션에서 허리, 에이밍, 고개 정도만 움직이는 로코모션 구현 가능
- 전부 Additive 세팅으로 구성되어 있음
- 단독적으로 사용불가
- 자동 룰 셋팅 : Start->실 모션으로 전환 가능하게 하는 boolean
- 스테이트 머신
- Locomotion들을 각각의 독립된 스테이트로 만들어 트랜지션을 통해 다른 스테이트로 변경 가능
- Additive
- 기존 모션에 애니메이션을 더해주는 기능 (ex. Hit 모션 등)
- 블렌드 인/아웃
- Unity의 Transition 같은 기능 / 모션을 부드럽게 넘어가기 위한 기능
카메라
- 마우스 회전을 입력받기
FRotator mCameraRotation;변수를 미리 PlayerCharacter.h에 선언하여 카메라 회전을 제한할 변수를 만들어 둠OnRotation()함수에서 카메라 PitchDelta, YawDelta를 계산 해두고, 카메라 제한 로직을 구성
void APlayerCharacter::OnRotation(const FInputActionValue& InputValue)
{
const FVector ActionValue = InputValue.Get<FVector>();
float PitchDelta = 90.0 * GetWorld()->GetDeltaSeconds() * ActionValue.Y;
float YawDelta = 90.0 * GetWorld()->GetDeltaSeconds() * ActionValue.X;
mCameraRotation.Pitch += PitchDelta;
mCameraRotation.Yaw += YawDelta;
if (mCameraRotation.Yaw < -180.f) {
mCameraRotation.Yaw = 360.f + mCameraRotation.Yaw;
}
else if (mCameraRotation.Yaw > 180.f) {
mCameraRotation.Yaw = mCameraRotation.Yaw - 360.f;
}
if (mCameraRotation.Pitch < -89.9f) {
mCameraRotation.Pitch = -89.9f;
}
else if (mCameraRotation.Pitch > 89.9f) {
mCameraRotation.Pitch = 89.9f;
}
mArm->SetRelativeRotation(mCameraRotation);
mAnimInst->SetAOData(mCameraRotation.Pitch, mCameraRotation.Yaw);
}