小白学UE4——蓝图通信使用方式超详细解释(可能是最详细的蓝图通信讲解)
首先要明确知道蓝图通信是干嘛用的?在UE4里面,两对象之中的参数是互相独立的,比如说角色身上有血量,怪物身上也有血量。但是如果我要给特定怪物扣血,这个时候就需要用到蓝图通信。因为我们在游戏中能够控制的是角色,而角色里面,是没有存怪物的血量的,如果我要怪物扣血,就必须想办法告诉怪物,它要扣减血量。
通过角色来告诉怪物扣减血量的行为,就叫做蓝图通信。
另外要特别强调的是,蓝图通信是指我要把一些事情从一个【对象】里面传给另一个【对象】。通信必须要在若干个【对象】之间进行,而不能够在两个类之间进行。
关于什么是类和什么是对象,就看我上一篇发的文章。
所以我们在通信的时候,最大的问题是怎么样找到我们的对象。
那么一般我们确定通信的对象的方式有以下几种。
第1种:通过玩家控制器来找到我们想要通信的对象,在ue4的蓝图里面默认是有一个办法能够直接获取到玩家控制器,节点名字叫做【获取玩家控制器】,从而能够获取到玩家的角色作为对象来进行通信。这种通信方法是专用的,只能够用来获取玩家的控制角色。
第2种:就是特定的事件触发的对象。比如说我使用了一个【组件开始重叠时】的事件。那么这个触发事件就可以找到发生“重叠”事件的对象,从而知道通信的对象是谁。比如说当a怪物碰到了b怪物的时候,我就可以把一些特定的参数从a怪物这里传给这个和a怪物碰到了的b怪物。类似的事件还有【组件结束重叠时】和【组件命中时】。
第3种:那么我想要在两个怪物没有触碰到的时候来进行通信的话,又该怎么办呢?比如说一种召唤师类型的怪物,他能够召唤小兵,那么就可以通过【生成actor】这个节点,来和生成的对象进行通信,从而实现召唤师和召唤小兵之间的通信。
第4种:骨骼和动画之间,有一种特定的通信节点【尝试获取pawn拥有者】,再通过【cast to】 节点进行强转来进行通信。这个节点我也不是很清楚底层的运作原理,但是猜测是在骨骼绑定了动画之后,通过【尝试获取pawn拥有者】节点就可以获得动画绑定的骨骼对象,从而进行通信。
第4种的补充:如果比较追根究底的话,可能会问【尝试获取pawn拥有者】这个不是已经指定了通信对象了吗?为什么还需要一个节点呢?因为我也不是很熟悉蓝图,也在摸索学习中,关于这个问题我有两个猜测:
第一种,一个动画会被多个对象绑定,所以需要一个【尝试获取pawn拥有者】,来获取到具体的所有对象,然后再通过【cast to】筛选符合条件的【类】进行通信。
第二种,我们在编写蓝图的时候,是没有对象具体存在的,那么我们就没有办法直接在【对象】的基础上来编写蓝图,我们只能够在【类】的基础上来编写蓝图,所以在编写蓝图的时候,我们就需要【cast to】来获取到指定的【类】,然后在【类】的基础上获取到这个【类】里面的变量,从而对这些变量进行编写。
第5种:可以获取场景内同一个【类】中的所有【对象】,然后对所有对象进行通信。比如说我要场景中所有的小兵都扣血,那么就可以通过【获取类的所有actor】,来获取到该类的对象,然后都进行操作。不过这个节点很耗性能,一般用的很少。
第6种:应该还有很多办法能够获取到指定的对象,但是我就不清楚了,希望有大神补充这些类似的节点。