행동 트리(Behavior Tree)는 언리얼 엔진에서 게임이나 시뮬레이션에서 NPC(Non-Player Characters) 또는 AI 제어 엔티티의 동작을 설계하고 구현하기 위해 사용되는 시각적 프로그래밍 도구이다. 동작 트리는 작업, 조건 및 제어 흐름을 나타내는 노드의 계층 구조로 구성된다.

 

목차

     

     


     

     

    Behavior Tree - 개념 설명

     


     

    Behavior Tree

     

    행동 트리(Behavior Tree)는 언리얼 엔진에서 게임이나 시뮬레이션에서 NPC(Non-Player Characters) 또는 AI 제어 엔티티의 동작을 설계하고 구현하기 위해 사용되는 시각적 프로그래밍 도구이다. 동작 트리는 작업, 조건 및 제어 흐름을 나타내는 노드의 계층 구조로 구성된다.

    동작 트리에는 네 가지 주요 유형의 노드가 있다:

    복합 노드: 이러한 노드는 동작 트리의 구조를 정의하며 하위 노드를 가질 수 있다. 언리얼 엔진에는 시퀀스와 셀렉터라는 두 가지 유형의 복합 노드가 있다. 시퀀스 노드는 하위 노드를 순서대로 실행하고, 셀렉터 노드는 성공할 때까지 하위 노드를 한 번에 하나씩 실행한다.

    장식자 노드: 이러한 노드는 하위 노드의 동작을 수정할 수 있다. 예를 들어 장식자 노드는 작업 노드에 조건을 추가하거나 하위 노드의 실행 확률을 변경할 수 있다.

    작업 노드: 이러한 노드는 특정 위치로 이동하거나 대상을 공격하는 등 NPC가 수행할 수 있는 작업을 정의한다.

    서비스 노드: 이러한 노드는 백그라운드에서 지속적으로 실행되며 정보를 제공하거나 다른 노드의 동작을 수정할 수 있다. 예를 들어, 서비스 노드는 플레이어 캐릭터의 위치를 지속적으로 확인하고 그에 따라 NPC의 동작을 업데이트할 수 있다.

    언리얼 엔진에서 동작 트리를 만들려면 노드를 끌어다 놓아 트리 구조를 만들 수 있는 동작 트리 편집기를 사용할 수 있다. C++ 또는 Blueprint 스크립팅을 사용하여 사용자 지정 작업 및 장식자 노드를 정의할 수도 있다.

    행동 트리를 만든 후에는 게임이나 시뮬레이션에서 NPC 또는 AI가 제어하는 엔티티에 연결할 수 있다. 그런 다음 동작 트리는 트리 구조에 정의된 논리에 기초하여 엔티티의 동작을 결정한다.

     


     

    게임에서의 인공지능 - 오토마타, FSM, Behavior Tree

     

      오토마타 FSM Behavior Tree
    구조 - 상태
    - 행동
    - 상태

    - Root (=Black Board)
    - Branch (=Composite): Sequence, Selector
    - Leaf (=Task)

     


     

     

    Sequence vs. Selector

     

     

      Sequence Selector
    통과 조건  성공하면 통과하여 옆으로 이동.
     실패하면 return  
     성공하면 완료해서 위로 올라간다.
     성공할 때까지 밑으로 내려간다. 자식 중 하나가 성공하면 return
    설명  자식노드 중 하나라도 실패하면 실패.
     자식노드 모두가 성공하면 성공.
     자식노드 중 하나라도 성공하면 성공.
     자식노드 모두가 실패하면 실패.
    사용  밑에 Task들 중 하나라도 실패하면 return하게 만들때 자주 사용한다.   상황에 따라 부분적으로 path를 만들어야할 때 사용한다.  

     

     

     

    Sequence & Selector 예시


     

    Controller 개념 정리

     

    Pawn이 컨트롤러 소유x, Controlled Pawn = 빙의된 폰 

     

    컨트롤러는 움직여주는 역할. 캐릭터는 플레이어 컨드롤러에 빙의되어 움직인다. 여기서 움직여주는 역할은 플레이어 컨트롤러.

     

    A Controller
    A Player Controller A AI Controller A NPC Controller

     

     


     

     

     

    Behavior Tree - Basic, Move

     

    BP_Enemy
    - StateComponent
    BP_AIController_Basic BlackBoard & Behavior Tree
    BP_Enemy_AI
    - WeaponComponent
    - MovingComponent
    - BehaviorTree (Behavior Tree)
      BB_AI

    BT_Basic
    BP_Enemy_AI_Basic
    - Enemy_AI (BP_Enemy)
    - AIPerception
       -  On Perception Updated

     


     

    BP_Enemy_AI

     

    • WeaponComponent 추가
    • MovingComponent 추가
    • 변수 생성: BehaviorTree (BehaviorTree)

     


     

     

    BP_Enemy_AI_Basic

     

    • BP_Enemy_AI_Basic(셀프) - Default - Behavior Tree - BT_Move 로 변경
    • BP_Enemy_AI_Basic(셀프) - Pawn - AI Controller Class - Auto Posses AI
      • Auto Possess AI: 자동으로 빙의를 시킬 것인데 언제 빙의를 시킬것인지 설정하는 항목.
        • Diabled: 자동 빙의 안 함. 우리가 원할 때 수동으로 빙의할 수 있음.   
        • Placed in World: 월드에 배치되었을 때.
        • Spawned: Spawn 되었을 때
        • Placed in World or Spawned: 둘 중 하나
    • BP_Enemy_AI_Basic(셀프) - Pawn - AI Controller Class - BP_AIController_Basic 으로 변경.

     


     

     

    BP_AIController_Basic

     

    Event Graph

    • 변수 생성: Enemy_AI (BP_Enenmy AI)
    • AIPerception 추가
      •  Sense Config - 0: AI Sight config
        • Sight Radius: 감지 범위(=반지름)
        • Loss Sight Radius: 감지 잃기 시작하는 범위
        • Peripheral Vision Half Angle: 시야각도의 반. ex. 45 설정하면 90도 감지
        • Detection by Affiliation: 블루프린트에서는 팀 아이디 지정x. C++에서는 지정 가능.
        • 최대 수명: 감지를 잃을 때까지의 시간
        • Starts Enabled: 처음부터 감지를 활성화할지 여부
    • On Possess 이벤트
    • On Perception Updated(AIPerception)
      • AIPerception이 감지되었을 때 콜이 된다.
      • Updated Actors에 감지된 Actors가 누적되어서 들어온다. 그래서 Updated Actors는 잘 안 쓴다.

     

     

    Perception

     

     


     

    Nav Mesh Volume 뷰포트에 추가

     

     


     

    BB_AI

     

    인공지능 - B블랙보드 - BB_AI 생성

    • 새 키 생성: Target (Object)
      • Key Type의 Base Class: BP_Player 로 지정 
    • 참고) AIController가 달라도 같은 블랙보드를 사용할 수 있다. 이런 경우 감지하는 경우를 공유하게 만들 수 있다.
      • ex. 몬스터 하나가 플레이어를 감지하면 몬스터가 몰려오는 기능을 구현할 수 있다.  

     


     

    BT_Basic

     

     


     

    BT_Move

     

    • Node - Acceptable Radius: 50.0 설정

    • Blackboard Based Condition
      • Flow Control
        • 관찰자 중단: self로 변경.
      • 블랙보드
        • Blackboard Key: Target으로 변경. Target is Is Set이면 실행하겠다는 의미. Target이 NULL이면 실행하지 않고 중단해버림.

     

     

     

    실행화면

     

     


     

     

     

     

     

    Behavior Tree - Melee

     

    BP_Enemy
    - StateComponent
    BP_AIController_Melee BlackBoard & Behavior Tree
    BP_Enemy_AI
    - WeaponComponent
    - MovingComponent
    - BehaviorTree (Behavior Tree)
      BB_AI

    BT_Melee
    BP_Enemy_AI_Melee   BTService_Melee

     


     

    BP_Enemy_AI_Melee 생성

     

    • Default - Behavior Tree - BT_Melee로 변경

     


     

    BP_AIController_Melee 생성

     

    Blueprint class - AIController - BP_AIController_Melee 생성

     

     

    Perception

    • 함수 생성: Perception
    • 변수 생성: Enemy_AI (BP_Enemy_AI)

     

     

    Event Graph

     

     


     

    BT_Melee 생성

     

     


     

    BTService_Melee 생성

     

     


     

    실행화면

     

     


     

     

     

     

     

    ABP: Animation Blueprint
    AN: Blueprint Class AnimNotify
    ANS: Blueprint Class - AnimNotifyState

    AO: Aim Offset

    BP: Blueprint Class
    BS: Blend Space

    BF: Blueprint Function Library
    CS: Matinee Camera Shake
    E: Enum 열거형
    DT: Data Table
    F: 구조체

    I: Blueprint Interface

    WB: Widget Bluepprint

     

    UE2212_02

      Level - LEVEL
    ABP_Player
    BP_GameMode
    BF_Helper
    IDamage
     
    AdvancedMagicFX12
    Materials  
    Meshes  
    Particles  
    Textures  
    Character Animation Bow
    Common
    Fist
    Hammer
    Parkour
    Sword
    Unarmed
    Wizard
    BlendSpaces BS_Bow
    BS_Fist
    BS_Hammer
    BS_Sword

    BS_Unarmed
    BS_Wizard
    Materials

    MaterialLayers
    M_UE4Man_Body
    M_UE4Man_ChestLogo
    Mesh SK_Mannequin
    SK_MAnnequin_PhysicsAsset
    Skel_Mannequin

    Montages
    Around Around_Montage
    Bow AR_DrawBow_Montage
    AR_ShootAndDraw_Montage
    Common HitReaction_Move_Montage
    HitReaction_Stop_Montage
    Fist Fist_Attack_1_Montage
    Fist_Attack_2_Montage
    Fist_Attack_3_Montage
    Fist_Hitted_Montage
    Hammer Frank_RPG_2Hand_Combo01_1_Montage
    Frank_RPG_2Hand_Combo01_2_Montage
    Frank_RPG_2Hand_Combo01_3_Montage
    Frank_RPG_2Hand_Combo01_4_Montage
    Parkour Run_Climb_Montage
    Sword Draw_Sword_Montage
    Sword_Attack_1_Montage
    Sword_Attack_2_Montage
    Sword_Attack_3_Montage
    Warp Warp_Montage
    Enemy_DeadFall_Montage
    HitReaction_Montage
     
    Textures UE4_LOGO_CARD
    UE4_Mannequin__normals
    UE4_Mannequin_MAT_MASKA
    UE4Man_Logo_N
    Weapons Elven Bow
    Greate Hammer
    Sword
    Component EStateType
    MovingComponent
    StateComponent
    WeaponComponent
    FeetComponent
    TargetComponent
       
    Effects P_Cube_Mesh_Test
    P_Genno_Weapon_Lightning_01
       
    Enemies Basic BP_AIController_Basic
    BP_Enemy_AI_Basic
    BT_Basic
    BT_Move
     
    Melee BP_AIController_Melee
    BP_Enemy_AI_Melee
    BT_Melee
    BTService_Melee
     
    BB_AI
    BP_Enemy
    BP_Enemy_AI
       
    Environment
    Materials Textures  
    Meshes    
    Obstacle    
    InfinityBladeEffects
    Effects
    FX_Combat_Base  
    FX_Materials  
    FX_Meshes  
    FX_Monsters  
    FX_Textures  
    FX_Textures_IB  
    Masters  
    Materials M_Mesh
    M_White_Inst
    M_Red_Inst
    M_Green_Inst
    M_Blue_Inst
    M_UE4Man_Body_Inst
    M_UE4Man_ChesLogo_Inst
       
    Meshes Cone_2
    Cube_2
    Cylinder_2
    Sphere_2
       
    Notifies ANS_Equip
    ANS_Combo
    ANS_Collision
    AN_BeginAction
    AN_EndAction
    AN_CameraShake
    AN_End_BowString
    AN_EndParkour
       
    Parkour EParkourArrowType
    EParkourType
    FParkourData
    ParkourComponent
    ParkourData
       
    Player BP_Player
    FZoomData
       
    Sounds S_BGM
    S_HitPunch
    S_OneHand_Hit
       
    Textures Crosshair
    T_Around
    T_Black
    T_Bow
    T_Fireball
    T_Fist
    T_Hammer
    T_Sword
    T_Warp
       

     
    Weapons
    Around Around_FireBall
    Around_FireBall1
    Around_IceBall
    Around_IceBall1
    DT_DoAction_Around
    DT_Equip_Around
    DT_HitData_Around
    Skill_Around
    Weapon_Around
     
    Bow AO_Aim
    Curve_Aim
    DT_DoAction_Bow

    DT_Equip_Bow
    DT_HitData_Bow
    FAimData
    Skill_Aim
    Skill_Arrow
    Weapon_Bow

     
    FireBall DT_DoAction_FireBall
    DT_Equip_FireBall
    DT_HitData_FireBall

    Skill_FireBall
    Weapon_FireBall
     
    Fist Combo_Fist - Blueprint Class Actor Weapon_Combo 상속
    CS_Fist
    DT_DoAction_Fist

    DT_Equip_Fist
    DT_HitData_Fist
     
    Hammer Combo_Fist - Blueprint Class Actor Weapon_Combo 상속
    CS_Hammer
    DT_DoAction_Hammer
    DT_Equip_Hammer
    DT_HitData_Hammer

     
    Sword Combo_Sword - Blueprint Class Actor Weapon_Combo 상속
    CS_Sword
    DT_DoAction_Sword
    DT_Equip_Sword
    DT_HitData_Sword
     
    Warp Weapon_Warp -  Blueprint Class Actor Weapon 상속
    DT_DoAction_Warp

    DT_Equip_Warp
     
    EWeaponType
    FDoActionData
    FEquipData
    FHitData
    Weapon - Blueprint Class Actor
    Weapon_Combo - Blueprint Class Actor Weapon 상속
    M_Weapon
    Skill
       
    Widget WB_CrossHair
    WB_Menu
    WB_MenuButton
    WB_Name
       

     

     

     

    '⭐ Unreal Engine > UE RPG Blueprint' 카테고리의 다른 글

    [UE] Behavior Tree 3, Spline(Bezier, Catmull-Rom)  (0) 2023.02.22
    [UE] Behavior Tree 2  (0) 2023.02.21
    [UE] Widget, Widet 내 텍스트 설정  (0) 2023.02.17
    [UE] Widget  (0) 2023.02.16
    [UE] Parkour - Normal, Wall, Widget  (0) 2023.02.15