⭐ Unreal Engine/UE RPG Blueprint

[UE] Behavior Tree 4, Melee Attack & Range

Designerd 2023. 2. 23. 09:04

 

행동 트리를 만든 후에는 게임이나 시뮬레이션에서 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/

     

    Environment Query System

    Documents the Environment Query System (EQS) and how it can be used to query the environment for data. That data can then be used to provide the AI with data used in the decision making process on how to proceed.

    docs.unrealengine.com

     

    allow straight

     


     

    참고) Function Library vs. Macro Library

     

    Function Library 함수 라이브러리

    • static의 개념. 전역함수
    • 어느 함수에 소속되지 않고 전역으로 쓰인다. 

     

    Macro Library 매크로 라이브러리

    • 그 클래스에 소속되는 함수