Behavior Tree Quick Start Guide'u takip ettim ve herşeyin yeteri kadar çalışmasını sağladım.Mavi Baskı kullanmadan Davranış Ağacı'nı Geri Al
Follower_AI_CON
denetleyicisini Blue Print to C++ 'ye dönüştürmeye çalışıyorum ancak Behavior Tree'ye (yalnızca C++ kullanarak) başvuru alamıyorum.
AIController
ana sınıfına sahip bir Blue Print yaratarak ve editör içinde (aşağıdaki resim) Davranış Ağacı'mı seçerek bir başvuru alabiliyorum, ancak Mavi kullanmayacağımı düşünürsek bu israf görünüyor Bu küçük açılır menüden başka bir şey için yazdırın.
Ben basit bir görev gibi görünen saatlerce bir sinir bozucu sayıda geçirdim. Sanırım insanları inanmaya itecek kadar akıllı değilim! : D
Benim çıplak kemikleri .h/.cpp dosyaları şuna benzer:
.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);
}
}