此方法为:先创建C++类MyTest,再以MyTest类为父类创建蓝图;在其他类中,可以通过MyTest调用蓝图对应方法。
1.创建c++代码
通过UE创建继承自Actor的C++代码
2.添加可以在UE中重写方法的说明
需使用声明:UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
BlueprintNativeEvent表示在c++中定义事件,可以在UE中实现,c++中必须实现。
如果UE中实现了,则覆盖c++中逻辑。
BlueprintCallable 表示可以在蓝图中调用。
完整代码 .h文件:
public:
//添加可以在UE中重写方法
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void Play(int num);
virtual void Play_Implementation(int num);
.cpp文件增加方法:
void AMyTest::Play_Implementation(int num)
{
}
其中.h文件的 virtual void Play_Implementation();可以不写,写是为了方便实用快捷键创建.cpp中的实现。
.cpp文件中必须实现Play_Implementation。
后缀为官方定义的不可更改。不然.h中的Play()会报错。
注:可以填参数int32,但我测试FString类型无法添加。
注:增加了此代码后,需要重写通过编辑器编译进入UE,不然可能不会出现步骤2中的可选事件
2.创建蓝图类
以MyTest为末班,创建蓝图类。
打开蓝图类,鼠标移动到左侧FUNCTIONS菜单上,可以出现下拉菜单,可以发现刚才出现了刚才定义的Play。
点击Play,可以发现生成了一个事件。
可以对其进行连线,以便进一步在C++中调用。
3.调用测试
到此,只要获取到该蓝图的Actor,Cast获取MyTest,即可调用声明的Play方法。
AMyTest* myTestActor = Cast<AMyTest>(Actor);
if(myTestActor)
{
myTestActor->Play(99);
}
注:Actor为创建出来的蓝图对象,自行获取