[UE] Behavior Tree 4, Melee Attack & Range
행동 트리를 만든 후에는 게임이나 시뮬레이션에서 NPC 또는 AI가 제어하는 엔티티에 연결할 수 있다. 그런 다음 동작 트리는 트리 구조에 정의된 논리에 기초하여 엔티티의 동작을 결정한다.
목차
Behavior Tree - Melee Sword Attack
0. BP_Enemy - StateComponent |
BP_AIController_Melee | 0. BB_AI 0. BT_Melee |
1. BP_Enemy_AI - WeaponComponent - MovingComponent - BehaviorTree (Behavior Tree) |
--------------------- 0. BP_PatrolPath --------------------- |
1. BTService_Melee |
2. BP_Enemy_AI_Melee | ------------------------- 0. PatrolComponent ------------------------- |
2. BTTask_Speed 2. BTTask_Patrol 2. BTTask_Equip 2. BTTask_Action |
AN_EndHitted 생성
AN_EndHitted 생성
Get Notify Name (const)
Received Notify (const)
확대
몽타주에 맞았을 때 Notify 추가 - HitReaction_Stop_Montage, Fist_Hitted_Montage수정
HitReaction_Stop_Montage
- 끝쪽에 (AN_)End_Hitted 노티파이 추가
Fist_Hitted_Montage
- 끝쪽에 (AN_)End_Hitted 노티파이 추가
1. BP_Enemy_AI
Event Graph
- 몬스터의 경우 Hit가 취소되는 경우는 생각하지 않아도 된다.
2. BTTask_Equip 수정
Blueprint Class - BTTask_BlueprintBase - BTTask_Equip 생성
Event Graph
참고) Weapon의 Begin Equip & End Equip
- Begin Equip 시 In Equipping (Boolean) = True.
- End Equip 시 In Equipping (Boolean) = False.
2. BTTask_Action 생성
Blueprint Class - BTTask_BlueprintBase - BTTask_Action 생성
Event Graph
- Receive Execute AI 이벤트 노드는 Behavior Tree 안에서 이 Task가 활성화될 때 트리거된다.
- Receive Tick AI 이벤트 노드
- In Action = False이고 Is Idle Mode이면 성공으로 종료.
- Receive Abort AI 이벤트 노드
- In Action = True이면 End_DoAction을 호출하고 Finish Abort로 Task 실행을 중단한다.
- In Action = False이면 Begin_DoAction을 먼저 호출하여 In Action을 True로 만들어주고 End_DoAction한 후에 Finish Abort로 Task 실행을 중단한다.
- Weapon의 In Action (Boolean)의 True/False로 구분한다. 아래의 참고 이미지와 내용 읽어보자.
참고) Weapon의 Begin_DoAction & End_DoAction
- Begin_DoAction 시 In Action (Boolean) = True.
- End_DoAction 시 In Action (Boolean) = False.
2. BTTask_Hitted 생성
Blueprint Class - BTTask_BlueprintBase - BTTask_Hitted 생성
Event Graph
- Receive Execute AI 이벤트 노드는 Behavior Tree 안에서 해당 Task가 활성화될 때 트리거된다.
- Enemy가 맞았을때 멈춰주도록 만든다. 따라서 Stop Movement 노드와 이어준다.
- Receive Tick AI 이벤트 노드는 Tick을 받는 Tick 함수이다.
- Hit의 완료 = BehaviorType이 Hit가 아닌 상황
- Hit가 완료되는 상황은 Behavior Type이 Hit이 아닌 상황이다. 이 경우 Hit 후에 BehaviorType이 Wait으로 변경되기 때문에 wait과 같은지로 체크해도 된다. 추후에 Hit 후의 동작이 wait이 아닌 동작으로 수정될 수도 있기 때문에 위와 같이 BehaviorType이 Hit가 아닌 경우로 조건 체크하는게 좋다.
※ 참고사항
에이전트가 AI 컨트롤러인 경우 항상 AI 버전의 이벤트 Receive Execute , 이벤트 Receive Abort , 이벤트 Receive Tick 을 선택해야 한다.다. 일반 이벤트 버전 및 AI 이벤트 버전이 모두 구현되어 있다면 더 적합한 버전 하나만 호출된다. 즉, AI의 경우에는 AI 버전이 호출되고 이외의 경우에는 일반 버전이 호출된다.
0.BT_Melee
실행화면
Behavior Tree - Range Fireball Attack
0. BP_Enemy - StateComponent |
0. BP_AIController_Range | 0. BB_AI 0. BT_Range |
1. BP_Enemy_AI - WeaponComponent - MovingComponent - BehaviorTree (Behavior Tree) |
--------------------- 0. BP_PatrolPath --------------------- |
1. BTService_Range |
2. BP_Enemy_AI_Range | ------------------------- 0. PatrolComponent ------------------------- |
2. BTTask_Speed 2. BTTask_Patrol 2. BTTask_ |
0. BP_AIController_Range 생성
0. BP_Enemy_AI_Range 생성
- WeaponComponent 안에 무기 할당. BP_Enemy_Range가 사용하게 될 무기들이다.
- 4: Weapon_Warp
- 6: Weapon_FireBall
1. BTService_Range
BTService_Melee를 복사하여 BTService_Range 생성
Event Graph
- Tick AI 입력변수
- In Controller (BP_AIController_Range)
- In Character (BP_EnemyAI)
Tick AI
확대
0. BT_Range
Weapon_FireBall
Enemy가 FireBall을 던지지 않고 손에 붙어만 있는 문제 해결하기
Begin Do Action 노드 추가
확대
- FireBall의 던지는 방향(=Direction)을 Camera 방향을 활용하여 설정하였다.
- BP_Player와 달리 BP_Player는 CameraComponent가 없다.
- 하지만 BP_Enemy는 FireBall을 던지기 위해 방향벡터(=Direction)가 필요하다.
- BP_Enemy의 경우 CameraComponent가 없으므로 Direction을 설정하려면 BP_Enemy를 캐스팅하여 Enemy의 정면방향(Get Actor Forward Vector)으로 Direction을 설정해준다.
- 위의 경우, 최상위 부모인 BP_Enemy는 사용하지 않을수도 있으니 BP_Enemy_AI로 캐스팅 해주었다.
실행화면
EQS System
EQS란?
질문을 할 공간이 필요하다. 이 때 공간은 sphere, grid 등 다양하다.
Querier? = 질문을 하는 주체
Vector는 위치로 다룬다. 공간을 질의해서 위치를 리턴 받을 수 있다.
https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/ArtificialIntelligence/EQS/
allow straight
참고) Function Library vs. Macro Library
Function Library 함수 라이브러리
- static의 개념. 전역함수
- 어느 함수에 소속되지 않고 전역으로 쓰인다.
Macro Library 매크로 라이브러리
- 그 클래스에 소속되는 함수
'⭐ Unreal Engine > UE RPG Blueprint' 카테고리의 다른 글
[UE] EQS (0) | 2023.02.24 |
---|---|
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom) (0) | 2023.02.22 |
[UE] Behavior Tree 2 (0) | 2023.02.21 |
[UE] Behavior Tree (0) | 2023.02.20 |
[UE] Widget, Widet 내 텍스트 설정 (0) | 2023.02.17 |
댓글
이 글 공유하기
다른 글
-
[UE] EQS
[UE] EQS
2023.02.24 -
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom)
[UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom)
2023.02.22 -
[UE] Behavior Tree 2
[UE] Behavior Tree 2
2023.02.21 -
[UE] Behavior Tree
[UE] Behavior Tree
2023.02.20