-
애니메이션 인스턴스 추가Game Programming/언리얼 2023. 9. 29. 14:25
C++클래스에 애니메이션 인스턴스를 추가한다.
void UpdateAnimationProperties(float DeltaTime); virtual void NativeInitializeAnimation() override;
매 프레임 마다 애니메이션을 업데이트하는 UpdateAnimationProperties 함수와
생성자에 해당하는 NativeInitializeAnimation를 상속 받는다.
private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement, meta = (AllowPrivateAccess = "true")) class AMyCharacter* MyCharacter; /*The speed of the character */ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement, meta = (AllowPrivateAccess = "true")); float Speed; /* Whether or not the chracter is in the air*/ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement, meta = (AllowPrivateAccess = "true")); bool bIsInAir; /*Wheter or not the chracter is moving*/ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement, meta = (AllowPrivateAccess = "true")); bool bIsAccelerating;
애니메이션이 들고 있는 케릭터를 추가
스피드, 공기 중에 있는지, 가속도 중인지 알 수 있는 변수를 선언한다.
void UMyAnimInstance::UpdateAnimationProperties(float DeltaTime) { if (MyCharacter == nullptr) { MyCharacter = Cast<AMyCharacter>(TryGetPawnOwner()); } if (MyCharacter) { // Get the lateral speed of the chracter from velocity FVector Velocity{ MyCharacter->GetVelocity() }; Velocity.Z = 0.f; Speed = Velocity.Size(); // Is the character in the air ? bIsInAir = MyCharacter->GetCharacterMovement()->IsFalling(); // Is the chracter accerlating? if (MyCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0) { bIsAccelerating = true; } else { bIsAccelerating = false; } } }
자신을 소유하는 폰을 캐스팅한다.
속도는 X,Y축에 대한 속도를 사용한다. (Velocity.Z = 0.f;)
CharacterMovementComponent에 있는 Falling함수와, GetCurrentAcceleration().Size() 함수를 사용해 공기 중에 있는지 가속도 중인지 확인한다.
MyProject에 애니메이션 블루프린트를 추가한다.
이벤트 그래프에서 Update Animation Properties를 연결 시키고 Deltatime을 준다.
'Game Programming > 언리얼' 카테고리의 다른 글
Fire Weapone (0) 2023.09.29 Rotator Character to Movement (0) 2023.09.29 케릭터 점프, 마우스 회전 (0) 2023.09.29 카메라 이동, 회전 (0) 2023.09.29 카메라 스프링 암 (0) 2023.09.26