언리얼에서의 애니메이션은 별도의 클래스에 몰빵해서 관리한다.
C++ 클래스로 만들 때, 부모 클래스를 AnimInstance로 고른다.
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Pawn, Meta=(AllowPrivateAccess=true))
float Speed;
UPROPERTY의 각 인자는 필요할 때마다 구글링하면 되므로 우선은 넘어간다.
AnimInstance C++ 클래스를 만들고,
해당 C++ 클래스를 상속받는 블루프린트 애니메이션을 만들고, (블루프린트 클래스가 아닌것에 유의)
해당 애니메이션을 적용시킬 BP_MyCharacter의 Animation Bluprint를 위의 ABP_MyAnim으로 설정한다.
실행 도중에 애니메이션 블루프린트에 들어가보면 현재 실행중인 애니메이션이 어떤 것인지 확인할 수 있다.
위에서 선언한 Speed는 애님 프리뷰 에디터에서 확인할 수 있다.
AnimGraph를 통해서 관리할 수 있다.
애니메이션에 관련된것은 AnimInstance에서 몰빵해서 관리하게 되는데, 실제로 어떤 입력값에 의해 이동이 발생해서 그 값으로 애니메이션의 상태가 결정되어야 하는 경우 AnimInstance의 값에 접근할 수 밖에 없다.
MyCharacter에서 움직임이 발생할때 마다 필요한 정보를 GetAnimInstance 등등 접근해서 수단과 방법을 가리지 않고 세팅하는 방법, 반대로 AnimInstance에서 매 틱마다 외부의 정보를 수집해서 자신에게 세팅하는 방법이 있을 것이다.
전자의 경우 코드가 뒤섞일 우려가 있다.
그래서 후자의 경우를 사용하는 게 일반적이다.
// 헤더
class TESTUNREALENGINE_API UMyAnimInstance : public UAnimInstance
{
GENERATED_BODY()
virtual void NativeUpdateAnimation(float DeltaSeconds) override;
private:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Pawn, Meta=(AllowPrivateAccess=true))
float Speed;
};
// ------
// cpp
void UMyAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
{
Super::NativeUpdateAnimation(DeltaSeconds);
// 현재 AnimInstance를 소유중인 Pawn을 가져오는 것을 시도함
auto pawn = TryGetPawnOwner();
// '시도' 이기 때문에 못 가져올 수도 있으므로 유효한 값인지 검사
if (IsValid(pawn))
{
Speed = pawn->GetVelocity().Size();
}
}
애니메이션 블루프린트를 만들면 테스트 하기가 편하다.
'언리얼 엔진 > 언리얼 엔진4 입문' 카테고리의 다른 글
[UE4 입문] 애니메이션 몽타주 (0) | 2022.09.02 |
---|---|
[UE4 입문] 스테이트 머신 (0) | 2022.09.02 |
[UE4 입문] 블루프린트 클래스 (0) | 2022.09.01 |
[UE4 입문] 캐릭터 생성 (0) | 2022.09.01 |
[UE4 입문] 게임플레이 프레임워크 (0) | 2022.09.01 |