복습: UseBlackboard
bool AAIController::UseBlackboard(UBlackboardData* BlackboardAsset, UBlackboardComponent*& BlackboardComponent){ if (BlackboardAsset == nullptr) { UE_VLOG(this, LogBehaviorTree, Log, TEXT("UseBlackboard: trying to use NULL Blackboard asset. Ignoring")); return false; } bool bSuccess = true; Blackboard = FindComponentByClass<UBlackboardComponent>(); if (Blackboard == nullptr) { Blackboard = NewObject<UBlackboardComponent>(this, TEXT("BlackboardComponent")); REDIRECT_OBJECT_TO_VLOG(Blackboard, this); if (Blackboard != nullptr) { bSuccess = InitializeBlackboard(*Blackboard, *BlackboardAsset); Blackboard->RegisterComponent(); } } else if (Blackboard->GetBlackboardAsset() == nullptr) { bSuccess = InitializeBlackboard(*Blackboard, *BlackboardAsset); } else if (Blackboard->GetBlackboardAsset() != BlackboardAsset) { // @todo this behavior should be opt-out-able. UE_VLOG(this, LogBehaviorTree, Log, TEXT("UseBlackboard: requested blackboard %s while already has %s instantiated. Forcing new BB.") , *GetNameSafe(BlackboardAsset), *GetNameSafe(Blackboard->GetBlackboardAsset())); bSuccess = InitializeBlackboard(*Blackboard, *BlackboardAsset); } BlackboardComponent = Blackboard; return bSuccess;}- 사실 두번쨰 인자에 블랙보드 애셋 객체를 채워 넘겨주지 않아도 된다
- 왜냐면 내부에서
Blackboard = FindComponentByClass<UBlackboardComponent>()로 컴포넌트를 찾고 이 유무로 조건식을 통과하기 때문
- 왜냐면 내부에서
UE5 StateTree
https://velog.io/@imeamangryang/Unreal-Engine-State-Tree-%EA%B0%9C%EC%9A%94 특징
- 행동 트리에 상태 머신을 결합한 구조
- 계층적 상태 구조: 부모/자식 상태 구조로 관리할 수 있음
- AI뿐만 아니라 UI, 애니메이션 등 범용적으로 사용함
- MassEntity, SmartObjects 등 5버전 신규 시스템과 호환이 잘됨
- 대규모 군중 등 상태 중심 로직에 특화
+비헤이비어 트리만 있는게 아니라 스테이트 트리, 신경망 엔진, 매스 엔티티 등 다양한 서브시스템들이 존재함

그리고 UBrainComponent 구조를 두어 언제든지 AIController에 서브시스템을 뺏다꼈다할 수 있게 확장성 갖춘 구조를 이미 완성해놓음
12. 행동트리 모델의 구현 총정리
Blackboard는 조회가 잦으므로 Key(FName)으로 구현돼있음
- 유지보수성을 위해 AI/ABAI.h를 만들고
#define으로 Key들을 변수화함
설계구조
- AIController가 두뇌 시스템(BT)을 사용함
- 두뇌시스템(BT)은 Pawn의 행동을 관장함. 범용적으로 작성되기 때문에 특정 유형의 액터에 대한 구체적인 지시는 피해야 함
- 그렇게 하기 위해서 각 BTTask에서 행동트리의 소유자 컴포넌트를 가지고 컨트롤러가 소유한 Pawn을 변환해 사용함
흠.. 결국 또 중요한건 아무리 설계에 대해 떠들어봤자 그래서 뭘 만들건데?가 더 우선인 것 같다. 뭘 만들지 정확하게 알아야 그에 맞는 설계가 생기고 과한지 부족한지 판단할 수 있음