[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);
}

© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6