ビヘイビア ツリー クイック スタート ガイドに従って、すべてが簡単に機能するようになりました。
現在、コントローラーをブルー プリントから C++ に変換しようとしてFollower_AI_CON
いますが、ビヘイビア ツリーへの参照を取得できません (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);
}
}