我有一个带有多个虚拟函数的 CPP 接口,借助“UINTERFACE(BlueprintType)”,我可以在我的蓝图项目中找到这些函数:
UINTERFACE(BlueprintType)
class UFLoop_ConditionalBloc : public UFBloc {
GENERATED_BODY()
public:
virtual ~UFLoop_ConditionalBloc() = default;
};
class IFLoop_ConditionalBloc : public IFBloc
{
GENERATED_BODY()
public:
virtual void Initialize() const = 0;
virtual void Update() const = 0;
protected:
std::unique_ptr<UFBloc> action;
};
我也有一个继承自这个类的类,但它没有“UCLASS(BlueprintType)”并且不继承自“UObject”,所以我在蓝图中找不到它:
class WhileBloc : public IFLoop_ConditionalBloc {
private:
std::function<bool()> condition;
std::unique_ptr<UFBloc> action;
public:
WhileBloc(std::function<bool()> cond, std::unique_ptr<UFBloc> act)
: condition(cond), action(std::move(act)) {}
void Execute() const override {
// implementation of my function
}
};
我想知道如何让它继承“IFLoop_ConditionalBloc”,以覆盖其功能,同时也想知道如何继承“UObject”,以便能够在蓝图中找到它
当我尝试这样做时:
UCLASS(BlueprintType)
class UWhileBloc : public UObject, public IFLoop_ConditionalBloc {
我有这个错误:“由 UCLASS 标记的类必须仅继承一个从 UObject 或直接从 UObject 派生的类”
获取从蓝图中可用的另一个类继承的类的最佳方法是什么?
要使您的 WhileBloc 类继承自 IFLoop_ConditionalBloc 并在蓝图中可用,您必须使用 UObject 派生的包装器。虚幻引擎不允许类继承多个 UObject 类。
解决方案如下:
创建一个新的 UObject 类(例如 UWhileBloc)来包装您的 WhileBloc 实例:
UCLASS(BlueprintType)
class UWhileBloc : public UObject, public IFLoop_ConditionalBloc {
GENERATED_BODY()
private:
std::unique_ptr<WhileBloc> WhileBlocInstance;
public:
UWhileBloc() {
WhileBlocInstance = std::make_unique<WhileBloc>(/* params */);
}
virtual void Initialize() const override {
WhileBlocInstance->Initialize();
}
virtual void Update() const override {
WhileBlocInstance->Update();
}
void Execute() const {
WhileBlocInstance->Execute();
}
};
这允许在蓝图中使用 UWhileBloc,而 WhileBloc 保存实际逻辑。