728x90
반응형
- 개요
플레이어를 추적하는 몬스터가 거리에 따라 다른 동작을 수행하도록 BehaviorTree를 개선한다
또 추적중인 몬스터가 방향을 회전하는 경우 발생하는 정적인 움직임을 제거하고
포션이나 크리스탈 같은 GE를 적용하는 Actor들이 몬스터에게는 적용되지 않도록 수정한다
1) AuraEnemy 클래스 - 정적인 움직임 제거 + Blackboard에 변수 추가

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

PossessedBy 함수에서 AIController가 몬스터에 빙의한 후에, Blackboard에 2개의 불리언 변수를 추가한다
- HitReacting 변수 : 플레이어로부터 피격당했는지 판단
- RangedAttacker 변수 : 원거리 몬스터인지 판단

HitReactTagChanged 함수에 위의 로직을 추가한다
Blackboard의 HitReacting 변수를 bHitReacting의 값으로 설정한다
2) AuraEffectActor 클래스

위와 같이 2개의 멤버변수를 추가한다
- bDestroyOnEffectApplication : True라면 GE를 적용한 후에 해당 Actor를 파괴
- bApplyEffectsToEnemies : True라면 GE를 몬스터에게 적용

ApplyEffectToTarget 함수에 위의 로직을 추가한다
GE의 적용대상이 Enemy 태그를 지니면서, bApplyEffectsToEnemies가 False라면 얼리리턴한다
또, 적용하는 GE의 SourceObject를 AuraEffectActor로 설정한다
3) 언리얼 에디터
3 - 1) AuraEffectActor 블루프린트

위와 같이 ApplyEffectToTarget 함수를 호출한 후에 Destroy 노드를 호출하지 않도록 수정한다
3 - 2) BehaviorTree 개선

Selector 노드 - FindNearestPlayer 서비스 이후의 노드에 위와 같이 노드들을 추가한다
위의 노드부터 시작하여 왼쪽 노드부터 실행하며 각각 다음과 같다
- Selector 노드 : TargetToFollow가 설정되었는지 확인 + HitReacting이 설정되지 않았다면 Abort
- Sequence 노드 : 원거리 몬스터인지 확인 + DistanceToTarget이 600보다 작은지 확인
- Sequence 노드 : DistanceToTarget이 500보다 작은지 확인
- Sequence 노드 : DistanceToTarget이 400 이하인지 확인 + DistanceToTarget이 500 이상인지 확인
- 전자의 경우 Wait 태스크를 수행하여 대기
- 후자의 경우 MoveTo 태스크를 수행하여 추적
- 최종 실행 결과
728x90
반응형
'언리얼 엔진 - 게임 프로젝트 > GAS 프레임워크 RPG 프로젝트' 카테고리의 다른 글
| 몬스터 AI - 최종) EQS를 사용한 원거리 몬스터 AI 설정 (0) | 2025.09.21 |
|---|---|
| 몬스터 AI - 5) Task 클래스를 이용한 몬스터의 공격 구현 (0) | 2025.09.20 |
| 몬스터 AI - 3) Service 클래스를 이용한 몬스터의 추적 구현 (0) | 2025.09.19 |
| 몬스터 AI - 2) AIController 클래스와 Service 클래스 (0) | 2025.09.19 |
| 몬스터 AI - 1) AI의 구성과 동작방식 (0) | 2025.09.19 |