假设我想要在代码中创建一个AI类,用于控制典当,但我希望我的设计人员能够使用蓝图来修改快速迭代的行为。
假设我在MyProjectBaseAI.h里有这个
#pragma once
#include "EngineMinimal.h"
#include "GameFramework/Actor.h"
#include "MyProjectBaseAI.generated.h"
UCLASS()
class MYPROJECT_API AMyProjectBaseAI : AActor
{
GENERATED_BODY()
public:
AMyProjectBaseAI(const FObjectInitializer& ObjectInitializer);
virtual void BeginPlay() override;
virtual void Tick(float DeltaSeconds) override;
void SetGoalPosition(FVector pos);
virtual void DetermineGoalPosition(int32 stateData1, int32 stateData2) = 0;
private:
FVector goalPosition;
};我想使这个类抽象,并有一个蓝图能够实现DetermineGoalPosition(...);调用SetGoalPosition(FVector pos)取决于他们的AI设计。
然后,设计人员如何在检查器中设置实现类,以便我的C++代码能够实例化它?假设我有一个类想像这样实例化实现类(当前使用基类):
AMyProjectBaseAI* ai = World->SpawnActor<AMyProjectBaseAI>(...);发布于 2019-06-21 17:04:30
抽象类设置:
Abstract和UCLASS中的Blueprintable说明符将类标记为抽象的和可蓝图的(尽管,当您从AActor或其他可蓝图类继承时,Blueprintable说明符是多余的)。BlueprintImplementableEvent的UFUNCTION说明符中使用DetermineGoalPosition。这允许蓝图实现该功能。此外,不声明该函数为虚拟,这是自ver 4.8以来根据非真实的标准进行的
新增:从多个引擎级别的BlueprintImplementableEvents中删除"BlueprintImplementableEvents“关键字,以符合新的”BlueprintImplementableEvents不应该是虚拟的“标准。
BlueprintCallable的UFUNCTION说明符中使用SetGoalPosition属性。这允许从蓝图中调用函数。
#语用一旦#包括"EngineMinimal.h“#包括"GameFramework/Actor.h”#包括"MyProjectBaseAI.generated.h“(抽象,蓝图)类MYPROJECT_API AMyProjectBaseAI : AActor { GENERATED_BODY() public: AMyProjectBaseAI(const FObjectInitializer& ObjectInitializer);虚拟空洞BeginPlay(重写);虚拟空滴答( DeltaSeconds);UFUNCTION(BlueprintCallable) void SetGoalPosition(FVector pos);UFUNCTION(BlueprintImplementableEvent) void DetermineGoalPosition(int32 stateData1,int32 stateData2);私人: FVector goalPosition;};即时设置
EditAnywhere说明符的公共EditAnywhere变量(如果子类只应在编辑器中的蓝图或实例级别设置,则为EditDefaultsOnly或EditInstanceOnly ):
公众: UPROPERTY(EditAnywhere) TSubclassOf AIImplementationClass;AIImplementationClass作为类:
AMyProjectBaseAI* ai = World->SpawnActor(AIImplementationClass);https://stackoverflow.com/questions/56707746
复制相似问题