UE4 C++入门之路3-C++和蓝图的互相调用

UE4 C++入门之路3-C++和蓝图的互相调用,第1张

UE4 C++入门之路3-C++和蓝图的互相调用

C++和蓝图的互相调用
  • 前言
    • 蓝图调用C++
    • C++调用蓝图
      • 全交给蓝图实现
      • C++可以提供默认实现
    • UFUNCTION(BlueprintCallable)的原理

前言

首先我们知道可以创建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选项将其对蓝图虚拟机公开。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5116169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存