🎮 UBFEnemyAnimInstance.h
class ABFEnemyCharacter; UCLASS() class BOSSFIGHT_API UBFEnemyAnimInstance : public UBFCharacterAnimInstance { GENERATED_BODY() public: virtual void NativeInitializeAnimation() override; virtual void NativeThreadSafeUpdateAnimation(float DeltaSeconds) override; protected: UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Anim Data | Refrence") ABFEnemyCharacter* OwningEnemyCharacter; };🎮 UBFEnemyAnimInstance.cpp
void UBFEnemyAnimInstance::NativeInitializeAnimation() { Super::NativeInitializeAnimation(); if (OwningCharacter) { OwningEnemyCharacter = Cast<ABFEnemyCharacter>(OwningCharacter); } } void UBFEnemyAnimInstance::NativeThreadSafeUpdateAnimation(float DeltaSeconds) { Super::NativeThreadSafeUpdateAnimation(DeltaSeconds); if (OwningEnemyCharacter) { // TODO AnimBlueprint 변수 최신화 } }



UENUM(BlueprintType)
enum class EBFEnemyAIState : uint8
{
Idle, //대기 상태 (플레이어 인식 X )
Strafing, // 플레이어 주변 배회(플레이어 인식 O)
Chase, // 플레이어 추적(플레이어 인식 O)
Attack // 공격 (플레이어 인식 O)
};
🎮 UBFEnemyAnimInstance.cpp
void UBFEnemyAnimInstance::NativeThreadSafeUpdateAnimation(float DeltaSeconds) { Super::NativeThreadSafeUpdateAnimation(DeltaSeconds); if (OwningEnemyCharacter) { bIsStrafing = (AIState == EBFEnemyAIState::Strafing) ? true : false; } }위와 같이 AIState가 EBFEnemyAIState::Strafing이면 true를 아니면 false를 반환 하도록 구현 하였다.
