2016-03-27 11 views
0

私はBehavior Tree Quick Start Guideに従っています。ブループリントを使用しないで行動ツリーを取得する

コントローラをBlue PrintからC++に変換しようとしていますが、C++のみを使用して動作ツリーへの参照を取得できません。

親クラスがAIControllerであるブループリントを作成し、エディタ(下の図)から自分の行動ツリーを選択して参照を取得できますが、私はブルーを使用しないと考えると無駄ですその小さなドロップダウンメニュー以外のものを印刷します。

Blue Print that only exists so that I can access my Behaviour Tree

私は単純な作業のように見えるものに時間のイライラ数を費やしてきました。私は人々が信じるように導くほどスマートではないと思います! :D

マイ最低限の.h/.cppのファイルは、次のようになります。

の.h

UCLASS() 
class THIRDPERSON_API AAIController : public AAIController 
{ 
    GENERATED_BODY() 

    ATPAIController(const class FObjectInitializer& ObjectInitializer); 

public: 

    virtual void Possess(class APawn* InPawn) override; 

    // Reference to the AI's blackboard component. 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI") 
    UBlackboardComponent* BlackboardComponent; 

    // The Behavior Tree Component used by this AI. 
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI") 
    UBehaviorTreeComponent* BehaviorTreeComponent; 

    UPROPERTY(EditDefaultsOnly, Category = "AI") 
    class UBehaviorTree* BehaviorTree; 

}; 

た.cpp

AAIController::AAIController(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) 
{ 
    BlackboardComponent = ObjectInitializer.CreateDefaultSubobject<UBlackboardComponent>(this, TEXT("EnemyAIBlackboard")); 
    BehaviorTreeComponent = ObjectInitializer.CreateDefaultSubobject<UBehaviorTreeComponent>(this, TEXT("EnemyAIBehaviorTree")); 
} 

void AAIController::Possess(APawn* InPawn) 
{ 
    Super::Possess(InPawn); 

    if (BehaviorTree) 
    { 
     BlackboardComponent->InitializeBlackboard(*BehaviorTree->BlackboardAsset); 
     BehaviorTreeComponent->StartTree(*BehaviorTree, EBTExecutionMode::Looped); 
    } 
} 

答えて

0

だからあなたが行動ツリーを指定する必要がありますAIControllerの青写真を作成せずに?

打ちパス

あなたはあなたのコードであなたのツリーへのパスをハードコーディングし、それを読み込むことができます:あなたは2つのオプションがあります。

FString Path = "/Game/AIStuff/FollowerBT"; 
UBehaviorTree* Tree = Cast<UBehaviorTree>(StaticLoadObject(UBehaviorTree::StaticClass(), nullptr, *Path.ToString())); 

どこかに設定し

あなたがのための青写真を持っている他のいくつかのグローバルクラスのツリーを設定します。しかし、このアプローチは非常にデータ駆動型ではありません。私はそれをカスタムGameMode Blueprintに入れ、それを取得します:

UBehaviorTree* Tree = Cast<AMyGameMode>(GetWorld()->GetAuthGameMode())->MyBehaviorTree; 
関連する問題