UE5 基础应用 —— 04 - 蓝图通信

目录

一、什么是蓝图通信?

二、直接蓝图通信

2.1 在关卡蓝图中直接拖拽Actor

2.2 Get Actor of Class/Get All Actors of Class

三、事件分发器(一对多)

3.1 创建并 Call 事件分发器(发送方)

3.2 Bind 事件分发器(接收方)

四、蓝图接口(一对一)

4.1 使用步骤

4.1.1 外部创建蓝图接口

4.1.2 被调用方蓝图 继承接口

4.1.3 调用方蓝图 调用接口函数


一、什么是蓝图通信?

在开发一个项目时,总是会遇到一个蓝图对象需要获取另一个蓝图对象的属性值或者函数功能等。例如,在制作一个开关门时,人物蓝图就需要调用门蓝图的一些功能。

蓝图通信的五种方式:直接蓝图通信、事件分发器、蓝图接口、CastTo**、间接通信

二、直接蓝图通信

2.1 在关卡蓝图中直接拖拽Actor

这种方式只有在关卡蓝图中才能使用,因为只有关卡蓝图才能直接将本关卡中的Actor直接选中拖入蓝图中,如下图所示:

然后可以将两个需要通信的Actor都拖拽到关卡蓝图中,然后进行属性或函数的访问。

2.2 Get Actor of Class/Get All Actors of Class

利用Get Actor of Class(获取类的Actor)或Get All Actors of Class(获取类的所有Actors)这两个节点获得场景中的Actor。

案例:两个蓝图,一个是BP_Pawn,一个是BP_Door,BP_Pawn需要调用Door蓝图中的Open Door函数,来实现开门的功能。

三、事件分发器(一对多)

  • 事件分发器(Event Dispatchers)可以实现一对多的蓝图通信方式,功能更加强大。
  • 使用场景:在一个游戏关卡中,一个BOSS的死亡,往往会触发很多功能,例如,爆装备、打开隐藏机关、人物升级等等。这就是一个事件发生后触发很多其他事件。这个业务就能使用事件分发器来实现。
3.1 创建并 Call 事件分发器(发送方)

3.2 Bind 事件分发器(接收方)

Bind 事件分发器的可以是事件,也可以是函数。

【补充】其实我们一般在 Player State 中创建事件分发器,然后在别的蓝图中 Call 和 Bind 事件分发器。

【小技巧】我们也可以拉出下面这个节点,然后选择合适的 事件 / 函数 即可,这样做更清爽一点。

四、蓝图接口(一对一)

问题:什么情况需要使用蓝图接口?

答案:当同样的操作,需要不同的响应时,就可以使用蓝图接口(其实概念和C++中的多态一样)。

可以把蓝图接口理解为一个纯抽象父类(C++ 中的纯虚函数)。想象一个这样的场景,我们在做一款FPS游戏,我的场景中有灯、电视(同属家具父类)。还有墙壁、柱子(同属建筑父类)。家具父类和建筑父类是没有关联的,而我想实现一个功能,就是我的子弹射击它们时会有不同破碎的效果。

我们可以凭借接口实现,把接口当作它们两个的纯抽象父类。然后在家具父类和建筑父类中先继承该接口,然后再实现逻辑。(这样比较规范一点)

最后我们就可以在角色蓝图中调用它们不同的接口啦。

4.1 使用步骤
4.1.1 外部创建蓝图接口

创建一个蓝图接口,名叫 BP_MyInterface,同时新建一个接口函数 Interface(可以理解为C++中的纯虚函数)

4.1.2 被调用方蓝图 继承接口

在 BP_Super 的类设置中继承该接口。

注意在 BP_Super 必须调用这个接口,写不写逻辑不重要。如果在 BP_Super 不调用的话, BP_Super 的子类无法调用。

然后在子类中实现方法。

4.1.3 调用方蓝图 调用接口函数

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值