私はBehavior Tree Quick Start Guideに従っています。ブループリントを使用しないで行動ツリーを取得する
コントローラをBlue PrintからC++に変換しようとしていますが、C++のみを使用して動作ツリーへの参照を取得できません。
親クラスがAIController
であるブループリントを作成し、エディタ(下の図)から自分の行動ツリーを選択して参照を取得できますが、私はブルーを使用しないと考えると無駄ですその小さなドロップダウンメニュー以外のものを印刷します。
私は単純な作業のように見えるものに時間のイライラ数を費やしてきました。私は人々が信じるように導くほどスマートではないと思います! :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);
}
}