[UE] Behavior Tree
행동 트리(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: 둘 중 하나
- Auto Possess AI: 자동으로 빙의를 시킬 것인데 언제 빙의를 시킬것인지 설정하는 항목.
- 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: 처음부터 감지를 활성화할지 여부
- Sense Config - 0: AI Sight config
- 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이면 실행하지 않고 중단해버림.
- Flow Control
실행화면
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 |
댓글
이 글 공유하기
다른 글
-
[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] Widget, Widet 내 텍스트 설정
[UE] Widget, Widet 내 텍스트 설정
2023.02.17 -
[UE] Widget
[UE] Widget
2023.02.16