创建可在虚幻引擎的蓝图中使用的 C++ 继承类

问题描述 投票:0回答:1

我有一个带有多个虚拟函数的 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 派生的类”

获取从蓝图中可用的另一个类继承的类的最佳方法是什么?

c++ unreal-engine5 unreal-blueprint
1个回答
0
投票

要使您的 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 保存实际逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.