UE4-(蓝图)第二十课蓝图之间的通信(类型转换、公开变量)

213 篇文章 579 订阅

一、使用转换类型节点,将获取到的物体转换到该类型,进行获取对应类型上的变量或者事件。(蓝图类与关卡蓝图通信)

1.使用自定义事件

2.使用类型转换Cast To..节点:想和谁通信就要类型转换到谁,这样就可以获得设置类型转换目标的所有的变量和事件函数。

3.使用IsValid节点判断传入的对象是否有效,为了防止出错。

通过自定义事件,在其他蓝图中调用该物体蓝图中的事件进行一些操作。

示例1:在场景中经过一定范围区域时,人物速度加速。

1.在Player 人物蓝图类中自定义事件,将CharacterMovment 组件拖拽到蓝图中,在运动组件中,去设置最大移动速度。

2.因为要设置Speed 的值,所以我们可以在自定义事件上,将速度的值直接传入。将 设置中的变量节点直接拖拽到事件上,直到有对勾出现,然后放置,会自动在事件上生成一个变量。然后将节点连接。(或者选中事件节点,在细节面板中设置变量,然后连接节点)

3.在场景中创建Basic下的BoxTrigger,并放置区域大小自己定义,

4.蓝图间的通信:打开关卡蓝图,选中世界大纲中的box Trigger进行创建重叠进入,重叠退出事件节点,(当物体重叠之后,重叠进入事件也是在执行的)

5.在重叠节点中,可以获取到与触发器重叠的Other Actor ,但是可能在场景中有很多物体都与触发器进行重叠,所以可以使用类型转换节点,获取到我们想要的物体,进而获取物体身上蓝图类中的变量还有事件。(类型转换后边的类型为人物蓝图类名,我的例子中使用的是Test_Player蓝图类,找自己场景中拖入的人物模型对应的文件夹下的蓝图类类名即可),右键搜索创建Cast to Test_Player节点

系统自带的第三人称蓝图

6.为了避免错误,所以使用判断对象是否可用节点 IsValid ,判断类型为转换类型节点中 As _ _的类型。如果有,将获取该角色蓝图类中的事件,进行速度设置,如果在该蓝图中经常用同一个类型的Player,可用直接提升为变量进行保存,后期获取或设置很便捷。

7.编译后运行。查看效果。

二、在人物蓝图类中控制一个其他物体旋转(两个蓝图类中的通信)

1.新建一个蓝图类名称为Rotation,打开该蓝图类,在Component面板增加Cube 

2.在事件图表中,创建自定义事件,名称为旋转开始,我的蓝图中,增加变量名称为Rotting,类型为布尔型,因为要控制物体旋转的开始及停止,使用FlipFlop节点,并设置变量bool值

3.使用用Tick事件节点的每帧都执行,对该物体的旋转进行设置,因为存在开关,所以获取Rotting 变量,使用Branch节点,对情况进行区分,停止的时候物体旋转值为0(沿Z轴旋转)

4.整体图

5.打开人物角色对应的蓝图类。因为要获取到要控制哪个物体进行旋转,(蓝图之间的通信)所以创建一个变量,该变量的类型就是上面创建的盒子的蓝图类类型(直接在类型中搜索Rotation类型),并将该变量改成共有。然后再场景中放入Rotation蓝图拖拽到场景中,并将该物体设置到人物蓝图中。

(相当于:Unity 在脚本中一个物体身上实现旋转操作脚本Rotation类,并将开启方法暴露,然后再人物模型身上的脚本中声明一个public Rotation obj 变量,然后再场景中将该物体拖拽到人物面板上的操作)

选中人物模型在细节面板中有默认栏,下面有我们自定义的变量,通过后面的吸取图标对场景中拖入的Rotation进行吸取。(也可以点击人物,在细节面板右侧有个小锁标志,代表将当前的面板固定,不在更改,然后在世界大纲视图选中Rotation物体,拖拽操作,会提示有绿色框)

拖拽操作:(操作完成后记得将锁图标打开,不打开,之后无论选什么物体,该面板都不会发生变化,更改值也是针对Player进行的更改)

6.回到人物蓝图类中,在事件图表界面编辑控制逻辑,使用G键控制物体旋转,获取Rotation变量,对该变量进行判断,是否有对象使用IsValid节点,Input Object 连接Rotation变量节点,调用Rotation中的旋转开始事件

7.所有蓝图中都编译,运行按G键查看效果。

三、场景中存在多个同类的物体

1.如果场景中有多个Rotation蓝图类的物体,可以使用Get All Actors Off Class,获取场景中所有类型为Actor Class 的物体,输出项为数组。在Actor Class下选择想要查找的物体。这里选择Rotation

2.控制数组中的某一个,使用获取数组的Get节点,输入参数为数组的角标,如果角标越界会报错,所以也要使用判断物体对象是否有效

3.控制场景中的Rotation蓝图Actor 全部旋转,使用foreachloop节点进行控制。

4.编译后运行。

  • 18
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值