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++和蓝图的互相调用的主要内容,如果未能解决你的问题,请参考以下文章

ue4/5蓝图与c++混用基础入门的基础操作(适合有蓝图基础和c++基础的新手,创建自己的蓝图)

UE4 定时器和事件分发机制(C++和蓝图)

UE4入门建立和打开项目

UE4 蓝图调用C++函数(附带项目工程)

用UE4来做Zego即构的房间列表

UE4蓝图传递