Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

게임 개발 메모장

[ UE5 ] Behavior Tree : Decorator 본문

언리얼 엔진/AI

[ UE5 ] Behavior Tree : Decorator

Dev_Moses 2023. 12. 21. 15:09

 

데코레이터는 객체 지향 설계에서 자주 언급되는 디자인 패턴중 하나인

Decorator Design Pattern과 같은 의미의 단어 이다.

 

즉, 존에 존재하는 Class를 수정하지 않고 기능을 변경하기 위해 기존 Class를 감싸서 

(Wrap을 한다고 함) 이 목적을 달성하는 패턴이다.

 

사용자는 기존 Class의 변경없이 부가적인 기능을 덧붙일 수 있는 장점을 지닌다.

(이때 인터페이스는 동일해야 한다.)

 

BT에서 데코레이터가 하는 역할도 똑같다.

데코레이터는 오직 하나의 자식 노드(즉, Task)를 가지는데 (즉, 바로 아래의 자식 노드를 

감싸는 역할을 한다는 의미) 이 노드의 행위에 데코레이터가 영향을 준다.

 

가장 단순하게 자주 사용되는 것은 소위 Filter(필터) 라고 불리는 것으로

자식이 수행을 할지 말지를 결정하는 데코레이터가 있다.

 

예를 들어 자식 노드가 반복적으로 수행되는 횟수를 제한하는 용도로 쓰일 수 있겠다.

 

예시 : 케이크 빵 ( 기존 코드 ) + 생크림, 딸기 초콜릿 장식 ( 데코 레이터 )

 

 

데코레이터는 BehaviorTree 노드 흐름의 조건들을 좀 더 명확하게 꾸며주는 역할

BT에서 해당 버튼을 눌러 데코레이터를 생성할 수 있다.

그렇게 만든 블루프린트 안에서 함수 오버라이드를 통해 필요한 함수들을 추가하고

 

 

 

최종적으로 보통 Perform Condition CheckAI 혹은 Perform Condition Check 함수를

오버라이드 하여 결과를 반환한다.

 

 

 

Player가 살아 있다면 BTT_Attack을 수행 하고 5초를 기다린다.

하지만, Player가 죽어있다면 BTT_Attack을 수행하지 않는다.

 

 

->  데코레이터 문은 그냥 if 문 Condition Check 결과에 따라 true냐 false 를 만들어 주며

     다른 노드들에 영향을 주게 된다.