UE4提供了一套非常强大的可视化编程系统——Blueprint(蓝图)系统,可以在不用VS或者Xcode等专门的代码编辑器中编写代码就能实现常见的各种交互功能。在本篇教程中我们将代领大家完成一个第三人称开关们的效果,完成之后大家可以体会到蓝图的强大。
首先打开UE4,新建第三人称的模板并附带初学者内容,因为我们要使用其中的模型。
在Content Browser(内容浏览器)面板中右键创建Blueprint Class(蓝图类),弹出的父类选择面板中选择Actor,重命名为BP_Door。双击打开BP_Door,在左上角的Components(组件)面板中选择Add Component(添加组件)>Static Mesh(静态网格)组件,并命名为DoorFrame,在该组件的StaticMesh属性中选择SM_DoorFrame。
按上述方法添加Door组件并指定SM_Door,添加完之后发现位置有偏差,利用移动工具进行微调,最终效果,如下图所示。
至此,基本的模型已经设置好。因为需要检测玩家进入才能触发开门的动作,所以我们需要一个Trigger,创建一个Box Collision组件并调整到合适的位置。
接下来我们开始写具体的逻辑,基本思路是这样的:当有Actor进入触发区域时,判断是不是玩家,如果是玩家则执行开门的动作;当有Actor退出触发区域时,判断是不是玩家,如果是则执行关门的动作。
选择Box Collision组件,在属性中点击“OnComponentBeginOverlap”和“OnComponentEndOverlap”两个属性后面的绿色加号,添加对应的碰撞事件,添加完成之后如下图所示。
从OtherActor拉出一条线,转化为ThirPersonCharacter类型,如果转化成功,则执行开门动作,因为此处开门是慢慢打开,所以我们需要借助Timeline(时间线)做缓动处理,来控制SM_Door组件的旋转。为Timeline添加一条float track并在一秒之内值从0变化到1,最终效果可以参考下图。
在Timeline播放的过程中我们需要借助Lerp设置SM_Door组件的旋转,这样当时间线播放的时候门就会按照我们设计的旋转值慢慢变化,也就有了慢慢打开的效果。
此时我们可以将新创建的蓝图类从ContentBrowser面板中拖动到场景中,之后运行游戏可以发现当玩家靠近门时门会自动打开,如下图所示。
但是目前存在一个问题,当玩家退出门所在的区域时,门仍然是打开的状态,并不会自动关闭,所以如果想让门自动关闭需要修改一下蓝图中的逻辑,在玩家退出该区域时门会自动关闭。
至此我们已经实现了第三人称开门的基本逻辑,最终蓝图中的连线如下图所示。