蓝图通信一

来源:互联网 发布:sails.js 编辑:程序博客网 时间:2024/05/22 13:35

介绍蓝图通信的第一篇

CSDN的博客添加图片太麻烦了,而且链接网页图片会出现错误,如果需要看详细文章,请访问我的微信公众号《猎梦虚幻研究社》

本篇将实现通过关卡蓝图来进行蓝图通信。

所谓的蓝图通信,实际上就是使不同的蓝图相互交换数据,达到蓝图之间可以相互控制相互引导的作用。

在之前的推送中,介绍到了关卡了蓝图。关卡蓝图的特点就是能很方便的控制整个关卡的逻辑,并且能够很轻易的找到关卡中的各种物体。

之前我们在关卡蓝图的介绍中了解了如何在关卡蓝图中获取一个物体对象(详情请翻看推送记录并搜索关卡蓝图),利用这个方法,当我们获取两个或多个物体时,就可以利用关卡蓝图这个“中转站”来进行不同蓝图之间的数据交换。

在这一片中我将举出两个例子,分别是人物进入范围内触发开灯和进入范围内触发开门。

在讲解这两个例子之前,我要介绍一个将要用到的组件:Box Trigger(盒体触发器)
这里写图片描述
当然你也可以使用它下面的球体触发器。这个触发器可以触发碰撞事件,但是没有碰撞体积,并且不会被渲染。也就是说它可以作为Overlap事件的触发体,而且不用担心碰撞会阻挡玩家或者是让玩家看见它的存在。

将这个Box Trigger拖放到场景中,同时再将上面的Point Light也拖放一个到场景中。
这里写图片描述
我们现在要做的是让玩家靠近灯时,灯能够自动打开,远离灯时自动关闭。

我使用的是第三人称工程,所以本身会有一个已经设置好移动逻辑和动画的第三人称角色可以供我使用,并且在我点击Play时能够控制这个人物。
这里写图片描述
现在点击选中场景中拖放的点光源(点击刚拖放到场景里的灯),然后马上切换回关卡蓝图,右键创建这个灯的引用。

然后选中旁边的Box Trigger,右键搜索BeginOverlap和EndOverlap事件,将他们创建在关卡蓝图上。
这里写图片描述
当我们得到上图后,逻辑就变得更加简单明了了。当玩家BeginOverlap时,触发Point Light的SetVisibility函数,当玩家EndOverlap时再一次触发Point Light的SetVisibility函数,通过两次重叠来控制等的显示(Visibility)。

点光源(Point Light)本身有几个方法可以设置是否显示,Hide in Game变量,Set Visibility函数和Toggle Visibility函数都可以实现相同的功能。

这里我们选择使用Toggle Visibility函数来实现功能。

首先选中场景中的灯,在细节面板中将Render分类中的Visible设置为假:
这里写图片描述
这时开始游戏默认灯是不会亮的。

然后在关卡蓝图中,在Point Light后搜索Toggle Visibility函数,连接方法如下图:
这里写图片描述
在上图中,从Point Light中直接拖出引脚线搜索Toggle Visibility就可以,中间的Target获取动作会自动添加上。

调整Box Trigger的大小,并且将它和灯叠放在一起:
这里写图片描述

这时点击Play就能如期看到结果:
这里写图片描述
开始游戏时灯是熄灭状态,当人物向前移动进入范围时灯被打开,当人物再次移动离开范围时灯熄灭。

这里存在一个小问题。当我们发射某些物体,比如丢出武器时,其他物体进入了灯光的触发范围,同样会引起灯光的亮或者灭(之前说Cast时我写的是子弹射入范围会触发,但是我后来自己测试发现不会,因为子弹的碰撞预设无法触发overlap事件,即使勾选了generate overlap event也无法触发。),这时就需要判断一下,是否为玩家进入了触发范围:
这里写图片描述
这样能够实现同样的功能,但是如果除了我们玩家以外的物体进入范围时,将不会触发使灯亮或者灭。

这里提到一句,使用Cast To ThirdPersonCharacter是因为我们的人物继承自这个蓝图。
这里写图片描述
如果你直接使用这个蓝图或者使用继承于它的蓝图,就可以这样写。


接下来是开门的使用方法。这里我们要用到Timeline组件(关于Timeline组件可以翻看推送记录或者是在后台回复Timeline)。

刚才已经使用了Box Trigger,现在保留刚才创建的两个overlap事件,创建一个StaticMesh或者Cube来当做门
这里写图片描述
并且在关卡蓝图中获得它的引用。
这里写图片描述
此时还需要设置一下门的移动性,在场景中选择门,在细节面板中将移动性从Static调整为Moveable
这里写图片描述
这时再创建时间轴,在里面添加一个float类型的曲线,两个点分别调整为(0,0)和(1,200)并且将时间轴时长设置为1秒,如下图所示:
这里写图片描述
最后创建一个Vector类型的变量,并且按照下图所示蓝图连接,就能看到开关门的效果了。
这里写图片描述
这时当玩家靠近门时,门会沿着Y轴移动200单位距离,当玩家离开范围后门又回到原来的位置。
这里写图片描述

这样我们就完成了对蓝图的交互,通过一个Box Trigger来通知灯或者是门做出相应的动作。

完成这个通信是通过关卡蓝图对场景全局物体操控的能力来实现的,所有的逻辑都要依赖关卡蓝图,并且所有能通信的物体必须在游戏开始之前被预先放置到场景中,如果动态生成物体则无法完成通信。

这样的蓝图通信方式只是一个极其简陋的方法,只限于简单的关卡。后面我们将介绍其他的蓝图通信方法。

这里写图片描述