UE4 C++入门之路3-C++和蓝图的互相调用
Posted 珞珈大胖强TURBO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 C++入门之路3-C++和蓝图的互相调用相关的知识,希望对你有一定的参考价值。
前言
首先我们知道可以创建C++类,而且可以基于C++类创建蓝图类,那么基于C++类创建的蓝图类和C++类之间的关系到底是什么呢,是继承吗?貌似还不是那么像,因为继承可以拥有父类的数据成员,但是蓝图类是否能访问C++类的数据成员却要用宏来设置,这其中有反射的加入,那么蓝图类和C++类中的方法可以互相调用吗?此文着力与讲清楚这个疑问
首先肯定是可以互相调用,并且蓝图调用C++简单, C++调用蓝图稍微复杂一点点,因为他不是严格的C++去调用蓝图方法,而更合适的像是C++留出了方法让蓝图去实现这种感觉,反正理解即可,这么多年的学习中,我也得到一些关于学习的经验,即有些概念不能过于咬文嚼字,一方面会让自己容易陷进去,越学越迷糊,另一方面可能会多一些无用功
废话说完,进主题-----
蓝图调用C++
很简单,直接像公开属性一样加UFUNCTION宏,这里写了{}是因为不想实现方法,空方法不给编译过,
Category 就是用户需要编辑此属性时,它将和其他属性(这些属性已以此类型命名标记)一同出现在Category设置的标题之下。这可将常用设置放置在一起,便于设计师进行编辑。
public:
UFUNCTION(BlueprintCallable, Category = "MyOpenDoor")
void OpenDoor()
{
}
效果即如下图
C++调用蓝图
全交给蓝图实现
加宏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
其他和上面一样
UFUNCTION(BlueprintCallable)的原理
对于下列代码
public:
UFUNCTION(BlueprintCallable, Category = "MyOpenDoor")
void OpenDoor()
{
}
UFUNCTION)宏把C++函数对反射系统公开。BlueprintCallable选项将其对蓝图虚拟机公开。
以上是关于UE4 C++入门之路3-C++和蓝图的互相调用的主要内容,如果未能解决你的问题,请参考以下文章