コード例 #1
0
ファイル: AIController.cpp プロジェクト: Foreven/Unreal4-1
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;
}
コード例 #2
0
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;
}