언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

몬스터 AI - 4) 추적 AI & 적과 GE를 적용하는 Actor 클래스 개선

monstro 2025. 9. 20. 14:00
728x90
반응형

- 개요

플레이어를 추적하는 몬스터거리에 따라 다른 동작을 수행하도록 BehaviorTree를 개선한다

또 추적중인 몬스터가 방향을 회전하는 경우 발생하는 정적인 움직임을 제거하고

포션이나 크리스탈 같은 GE를 적용하는 Actor들몬스터에게는 적용되지 않도록 수정한다

 

1) AuraEnemy 클래스 - 정적인 움직임 제거 + Blackboard에 변수 추가

 

AuraEnemy 클래스의 생성자에서 Controller가 바라보는 방향으로 캐릭터를 회전하도록 설정한다

 

 

PossessedBy 함수에서 AIController몬스터에 빙의한 후에, Blackboard2개의 불리언 변수를 추가한다

  • HitReacting 변수 : 플레이어로부터 피격당했는지 판단
  • RangedAttacker 변수 : 원거리 몬스터인지 판단

 

 

HitReactTagChanged 함수에 위의 로직을 추가한다

BlackboardHitReacting 변수를 bHitReacting의 값으로 설정한다

 

2) AuraEffectActor 클래스

 

위와 같이 2개의 멤버변수를 추가한다

  • bDestroyOnEffectApplication : True라면 GE를 적용한 후해당 Actor를 파괴
  • bApplyEffectsToEnemies : True라면 GE몬스터에게 적용 

 

 

ApplyEffectToTarget 함수에 위의 로직을 추가한다

GE의 적용대상Enemy 태그를 지니면서, bApplyEffectsToEnemiesFalse라면 얼리리턴한다

또, 적용하는 GE의 SourceObjectAuraEffectActor로 설정한다

 

 

3) 언리얼 에디터

3 - 1) AuraEffectActor 블루프린트

ComponentBeginOverlap 이벤트 수정

 

위와 같이 ApplyEffectToTarget 함수를 호출한 후Destroy 노드를 호출하지 않도록 수정한다

 

3 - 2) BehaviorTree 개선

 

Selector 노드 - FindNearestPlayer 서비스 이후의 노드에 위와 같이 노드들을 추가한다

위의 노드부터 시작하여 왼쪽 노드부터 실행하며 각각 다음과 같다

  • Selector 노드 : TargetToFollow설정되었는지 확인 + HitReacting 설정되지 않았다Abort
  • Sequence 노드 : 원거리 몬스터인지 확인 + DistanceToTarget600보다 작은지 확인
  • Sequence 노드 : DistanceToTarget500보다 작은지 확인
  • Sequence 노드 : DistanceToTarget400 이하인지 확인 + DistanceToTarget500 이상인지 확인
    • 전자의 경우 Wait 태스크를 수행하여 대기
    • 후자의 경우 MoveTo 태스크를 수행하여 추적

 

- 최종 실행 결과

 

728x90
반응형