首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用蓝图检索行为树

不使用蓝图检索行为树
EN

Stack Overflow用户
提问于 2016-03-27 14:53:15
回答 1查看 1.3K关注 0票数 0

我跟踪了行为树快速启动指南,让一切都足够简单了。

现在,我正在尝试将Follower_AI_CON控制器从蓝图转换为C++,但无法获得对行为树的引用(仅使用C++)。

我可以通过创建一个具有AIController父类的蓝图并在编辑器中选择menu (下图)来获得引用,但考虑到除了那个微小的下拉菜单之外,这似乎是浪费了。

我花了很多令人沮丧的时间在看似简单的任务上。我想我不像我引导人们相信的那样聪明!

我的基本.h / .cpp文件如下所示:

.h

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-20 16:34:06

因此,您需要指定行为树而不生成AIController蓝图?你有两个选择:

硬编码路径

您可以在代码中硬编码到树的路径,然后加载它。但这种方法并不是由数据驱动的:

代码语言:javascript
运行
复制
FString Path = "/Game/AIStuff/FollowerBT";
UBehaviorTree* Tree = Cast<UBehaviorTree>(StaticLoadObject(UBehaviorTree::StaticClass(), nullptr, *Path.ToString()));

设置在其他地方,

在您有蓝图的其他全局类中设置树。我会把它放在一个定制的GameMode蓝图中,然后检索它:

代码语言:javascript
运行
复制
UBehaviorTree* Tree = Cast<AMyGameMode>(GetWorld()->GetAuthGameMode())->MyBehaviorTree;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36248721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档