안선생의 개발 블로그

[UE5 AI] Behavior Tree - Decorator 본문

언리얼/AI

[UE5 AI] Behavior Tree - Decorator

안선생 2024. 3. 27. 23:30

설계 개념에서 decorator는 원래 어떤 기능을 하던 모듈은 고치지 않고 그대로 둔 채로 그 모듈을 감싸서 어떤 기능을 추가하는 것을 말합니다. 언리얼 엔진에서의 decorator도 같은 개념인데, Decorator는 Behavior Tree에서 각 task에 붙어서 task가 할 일을 더 추가해 주는 일을 합니다. 그리고 decorator가 task에 붙지만 composite에도 붙습니다. 언리얼 엔진에서 decorator는 주로 이 노드(task나 compositr)가 실행될지 말지를 체크하는 역할을 합니다. 그래서 한 노드에 서비스, 태스크, 데코레이터가 모두 들어가 있다면 데코레이터, 서비스, 태스크 순으로 실행됩니다. 데코레이터에서 거절하면 그 노드는 아예 실행이 안 됨 만약 compositie에 붙어 있는 데코레이터에서 거절하면 그 하위 서브 트리들도 모두 실행이 안됩니다.

 

IF문이랑 비슷

 

 

생성방법

 

보통 블랙보드를 많이 쓰니 블랙보드 선택

 

if문이랑 같음

블랙보드 추가된 모습 파란게 블랙보드

 

오른쪽 디테일 패널창 보면

관찰자 노티파이 :

On Result Change :  가져온 조건 결과가 바뀔 때 Ex)  노드가 다시 시작될 떄 다시 확인

On Value Change : 관찰되는 블랙보드 값이 바뀔 때 재시작, Ex) 바뀔때마다 다시 확인

 

관잘차 중단

None : 아무일도 일어나지 않음 : 분기는 넘어가지만 하위 트리들은 실행됨

 

Self

 : 실행중인 자기 자식 하위 노드 전부 중지

 

Lower Priority 

오른쪽 하위 노드들 모두 중지

 

 

Both 

 

모든 노드 중지

 

 

블랙보드

 

키 쿼리

Is Set : 참인가

IS Not Set : 거짓

 

참이면 실행, 거짓이면 다음 노드 실행

 

블랙보드값에 따라 키 쿼리가 바뀜

 

스트링이면

쿼리가 저렇게 바뀜 

 

다른 예시

 

TimeLimit 데코레이터

 

Task에 주로 붙임 만약 Move To가 5초 이상동안 실행되면 거짓이 되므로 다른 노드 실행

 

 

즉 데코레이터는 if문이라고 보면된다. 조건이 맞으면 실행하고 아니면 다른노드를 실행한다 보면 된다.