蓝图之间通信的几种常用方式
1. 直接拾取
打开变量小眼睛
在变量中打开小眼睛使这个变量成为公有变量,此actor放入场景后,
吸取场景中的对象
选中它,在细节面板可以看到框中新加的属性,可以点击吸管去选择场景中的其他蓝图,该蓝图类型是你在变量中设定好的变量类型。这样两者之间就有了关联。
特点:直接,简单,但有特异性一对一不灵活。
适用于简单粗暴的功能。
2. 类型转换
类型转换
Castto到其他蓝图类型这样就与其他这个类型的蓝图或者继承这个类型的蓝图都有了联系。
特点:可以指定单个或者一类蓝图,但工程中过多使用会造成不必要的浪费,性能损耗。
适用于最初设定时转换一个大类。但学习中常常用于简单粗暴的碰撞检测。
注:碰撞检测也是蓝图之间通信的一种常用方式。
3.得到指定蓝图类的成员
得到场景中指定类型的成员
GetAllActorsOfClass再从这个类中遍历得到指定的对象(实例),此对象必须与这个蓝图对象在同一个场景里,如果场景里有不止一个这类对象则返回最后一个。
添加判断
如果场景里有不止一个这类对象,可以添加判断来指定到数组的哪一个对象。
特点:可以指定单个或者一类蓝图对象实例,但要找到场景中所有包含此类的对象较为损耗性能,且数组遍历较慢,最好不要用于Tick事件。
适用于单个事件。
3. 接口
创建接口
接口图标,命名
接口函数
创建蓝图接口,并在接口里创建函数
类设置
添加接口
接口事件
调用接口
接收接口的蓝图内,类设置细节面板添加接口。
接收接口的蓝图内添加接口事件。
发送接口的蓝图内添加接口消息
特点:发送方与接收方无引用关系,只有在需要时才会触发,有利于搭建功能性框架和重复调用。
适用于所有规范性蓝图框架搭建。
注:上图中,因为接口之间没有引用,就不会报错,如果的Tree没有被玩家检测到就不会触发相应的接口事件。因此举例一种通信方式:
得到与玩家碰撞器重叠的Actor
每帧检测与玩家碰撞器所重叠的Actors,遍历
筛选使用此接口的Actor
筛选有此接口的蓝图实例并保存起来,这样就找到了Tree。
调用接口的其他一些判断
截完所有节点。
这时候把数组遍历放到Tick事件是游戏功能的需求,它限定了寻找范围是与玩家碰撞器重叠的Actor,因此也不会损耗太多。