在学习终于到了一些关于蓝图通信方法的混淆,今天总结一下。
在蓝图中信息之间的传递时极其重要的,这种信息之间的传递称之为蓝图通信,Unreal中蓝图通信的方法一共有四种,分别用于不同的情况,基本涵盖了所有蓝图之间的通信。
第一种:直接蓝图通信
最适用的情况:在Level中同时存在的两个Actor之间需要信息传递,那么就可以使用直接蓝图通信法。
这里大概阐述一下,假设ActorA需要使用ActorB中的信息,那么在ActorA的蓝图中创建一个以ActorB为数据类型的变量,如此一来,将变量拉进去使用就可以调用信息了,虽然简单快捷,但是这里还有一点要注意的就是实例化,所创建的变量仅仅只是一个Reference而已,只是一个没有灵魂的肉体,即使调用出了信息,也不能使用。如何寻找灵魂呢,点到Level中选中ActorA,在Detail面板中会有一个Detault的选项下面就可以选择灵魂了,用吸管吸也好,下拉菜单选择也好,总之把灵魂选择还是那个就可以调用任何信息了。
第二种:事件分配器
最适用的情况:从Actor到Level中的信息传递。也可以类蓝图之间信息传递。
通过Event Dispatcher绑定一个或多个事件,这些事件可以在类蓝图中调用,也可以在Level中调用。用的最多的就是Level了。
最下面就是事件分发器了,如何用呢,在需要绑定的事件前添加分发器的Bind形式如下
这是绑定事件的节点,之后跟需要被绑定的事件,下面的Call是调用被绑定的事件,这种信息传递的方式是用的比较多的,应用也很广,可以在关卡和类之间随意调用,类与类也是可以的。
第三种:蓝图接口
最适用情况:数个蓝图中存在相似的功能,但是在调用后执行不同的效果。
这里也是最能体现C++面对对象编程的思路的信息传递的方法。举例子:玩家有一个喷火器,这个喷火器喷到树上,树着火了,喷到雪人上,雪人化了。。。。玩家按下R键,在门口就是开门,在兵器前面就能捡起兵器
对于接口来说关键是函数的实现和调用。与C++中的多态性相同,原理就是利用C++中的多态。
第四种:蓝图投射(蓝图中的转换)
最适用情况:
第一:访问特殊蓝图,像角色蓝图这种特殊蓝图的访问就可以用投射法,简单实用。
第二:需要访问相同类的多个蓝图,以相同的方式修改。
第三:访问一个特殊的子蓝图。
利用Cast to以确认是否是需要的目标蓝图。