- 前言
- 蓝图调用C++
- C++调用蓝图
- 全交给蓝图实现
- C++可以提供默认实现
- UFUNCTION(BlueprintCallable)的原理
首先我们知道可以创建C++类,而且可以基于C++类创建蓝图类,那么基于C++类创建的蓝图类和C++类之间的关系到底是什么呢,是继承吗?貌似还不是那么像,因为继承可以拥有父类的数据成员,但是蓝图类是否能访问C++类的数据成员却要用宏来设置,这其中有反射的加入,那么蓝图类和C++类中的方法可以互相调用吗?此文着力与讲清楚这个疑问
首先肯定是可以互相调用,并且蓝图调用C++简单, C++调用蓝图稍微复杂一点点,因为他不是严格的C++去调用蓝图方法,而更合适的像是C++留出了方法让蓝图去实现这种感觉,反正理解即可,这么多年的学习中,我也得到一些关于学习的经验,即有些概念不能过于咬文嚼字,一方面会让自己容易陷进去,越学越迷糊,另一方面可能会多一些无用功
废话说完,进主题-----
很简单,直接像公开属性一样加UFUNCTION宏,这里写了{}是因为不想实现方法,空方法不给编译过,
Category 就是用户需要编辑此属性时,它将和其他属性(这些属性已以此类型命名标记)一同出现在Category设置的标题之下。这可将常用设置放置在一起,便于设计师进行编辑。
public: UFUNCTION(BlueprintCallable, Category = "MyOpenDoor") void OpenDoor() { }
效果即如下图
加宏BlueprintImplementableEvent,BlueprintImplementableEvent蓝图可执行事件,C++不需要实现
UFUNCTION(BlueprintImplementableEvent, Category = "BP_Funclib") void BPPrint();
这样这个方法就可以在蓝图中实现,这样蓝图也能调用,C++调用的时候也就是调用到蓝图实现的方法
如果带参数,则为
UFUNCTION(BlueprintImplementableEvent, Category = "BP_Funclib") void BPPrint(float a);C++可以提供默认实现
如果想
C++提供默认实现,如果蓝图不实现,方法为C++实现,如果蓝图实现,执行蓝图实现的方法
UFUNCTION(BlueprintNativeEvent, Category = "AAA") void RainSpawnNativeEvt(); void RainSpawnNativeEvt_Implementation() { }
RainSpawnNativeEvt_Implementation方法在C++中实现,如果蓝图没有实现RainSpawnNativeEvt 的时候C++会调用RainSpawnNativeEvt_Implementation
其他和上面一样
对于下列代码
public: UFUNCTION(BlueprintCallable, Category = "MyOpenDoor") void OpenDoor() { }
UFUNCTION)宏把C++函数对反射系统公开。BlueprintCallable选项将其对蓝图虚拟机公开。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)