bool AAIController::UseBlackboard(UBlackboardData* BlackboardAsset) { if (BlackboardAsset == NULL) { UE_VLOG(this, LogBehaviorTree, Log, TEXT("UseBlackboard: trying to use NULL Blackboard asset. Ignoring")); return false; } bool bSuccess = true; UBlackboardComponent* BlackboardComp = FindComponentByClass<UBlackboardComponent>(); if (BlackboardComp == NULL) { BlackboardComp = NewObject<UBlackboardComponent>(this, TEXT("BlackboardComponent")); if (BlackboardComp != NULL) { InitializeBlackboard(*BlackboardComp, *BlackboardAsset); BlackboardComp->RegisterComponent(); } } else if (BlackboardComp->GetBlackboardAsset() == NULL) { InitializeBlackboard(*BlackboardComp, *BlackboardAsset); } else if (BlackboardComp->GetBlackboardAsset() != BlackboardAsset) { UE_VLOG(this, LogBehaviorTree, Log, TEXT("UseBlackboard: requested blackboard %s while already has %s instantiated. Forcing new BB.") , *GetNameSafe(BlackboardAsset), *GetNameSafe(BlackboardComp->GetBlackboardAsset())); InitializeBlackboard(*BlackboardComp, *BlackboardAsset); } return bSuccess; }
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")); if (Blackboard != nullptr) { InitializeBlackboard(*Blackboard, *BlackboardAsset); Blackboard->RegisterComponent(); } } else if (Blackboard->GetBlackboardAsset() == nullptr) { 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())); InitializeBlackboard(*Blackboard, *BlackboardAsset); } BlackboardComponent = Blackboard; return bSuccess; }