[UE5] 언리얼5 AI - Behavior Tree_BTDecorator

AnJH·2024년 5월 28일

Behavior Tree_BTDecorator

Decorator는 Composite나 Task에 붙어서 해당 노드의 실행여부를 결정한다.

Composite에 붙어서 사용될 경우에는 하위노드들 또한 모두 실행되지 않는다.

  • Decorator 생성

이렇게 생성된 Decorator는 필요한 함수를 오버라이드하여 자유롭게 사용이 가능하다.

이 중 대표적으로 조건의 참, 거짓을 결정할 수 있는 CalculateRawConditionValue() 함수가 있다.

  • BTDecorator_Condition.h
virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override;

위와 같은 형태로 오버라이드하여 헤더에 선언한다.

  • BTDecorator_Condition.CPP
bool bResult = Super::CalculateRawConditionValue(OwnerComp, NodeMemory);

bool타입 변수에 Super 키워드를 통해 상속받은 클래스의 함수를 실행시키고, 해당 변수가 반환하는 타입에 따라 행동트리의 흐름을 제어할 수 있다.

이처럼 커스텀한 Decorator가 아니더라도 기본적으로 Behavior Tree 내에서 사용이 가능한 Decorator도 존재한다.

  • Default Decorator

위와 같이 기본적으로 정의되어 있는 여러 Decorator가 있으며 가장 상단에 있는 Blackboard는 Blackboard의 Key값을 사용하여 조건을 생성할 수 있다.

  • Blackboard Decorator_Details

Blackboard로 생성한 Decorator는 다음과 같은 설정이 가능하다. Notify Observer를 통해 값이 유동적으로 변하는 과정에서 조건이 참으로 바뀌었을 때, 하위노드가 실행되는 타이밍을 결정할 수 있고, 어떤 AI를 Control할 것인지 결정할 수 있다.

Key Query에서는 Blackboard Key 값이 None일 때와 값이 있을 때 중 언제 행동트리가 실행되게 할 것인지 결정할 수 있다.

0개의 댓글