您现在的位置是:首页 >学无止境 >虚幻引擎-开关门的实现(蓝图)网站首页学无止境
虚幻引擎-开关门的实现(蓝图)
简易自动门
在虚幻引擎中,一个简单的自动感应门是通过触发器感应玩家是否到达了设定的开门范围,从而开门。这个触发开门的范围就是触发器的范围。
在场景中搭建墙、门框、门,同时搭建一个触发框。当人物走到触发框的范围则开门,离开则关门(选中的橙色表示触发框)。
在关卡蓝图中事件图表对开关门逻辑进行编辑。首先,需要给触发框添加一个开始接触事件和一个结束接触事件,分别为OnActorBeginOverlap和OnActorEndOverlap(括号中间为对触发框的命名)
然后则是门的运动,门的开关只是在Z轴上做旋转运动,所以只需要改变门在Z轴上的旋转角度就行。假设门初始是0度,开门后是85度,位置不变。当接触到触发框后门就会从0度变为85度的状态。这里就要添加一个设置Actor旋转,来改变门的角度,
在这可以鼠标右键单价New Rotation分割结构体引脚,来只修改Z轴的旋转。
但是如果只是这样,那么当接触触发框时,门是马上从0度变为85度,没有门打开的过程,所以需要使用TimeLine(时间轴)来设置开门过程。
双击时间轴,进入时间轴设置
添加一个浮点轨道,在0秒的时候插上一个关键帧为0度,在插入一个关键帧5秒或其他门打开的时间为85度,这样门就不会一瞬间到85度而是经过一个打开的过程到85度。
将个事件连线,编译。
运行,效果如下
使人物无法直接穿过门
选中门,在细节窗口中找到静态网格体,双击门进入视口
在上面的碰撞中可以给门添加一个盒体简化碰撞,显示为绿色边框,可以调整边框缩放,保存。
按F键开关门
如果只是在关卡蓝图的事件图标中编辑,那么在游戏中每一扇门都需要复制同上简易自动门的蓝图操作。所以可将这一个门包括开关门的逻辑写入一个蓝图类当中。
蓝图类:蓝图类定义了一种新类别或类型的Actor,这些Actor可以作为实例放置到地图中, 就和其他类型的Actor的行为一样.
可以在内容菜单中鼠标右键创建一个蓝图类,下图的BP_Door。每当需要可以通过F键开门的门的时候,就可以将这个蓝图类拖入场景中调用。
双击打开蓝图类
可以在蓝图类中使用静态网格体搭建门,通过视口能够看见,在事件图表中使用蓝图搭建开关门逻辑。在这里面,触发框Box的作用不再是开关门,而是用来获取玩家是否到达了这个范围,再这个范围内玩家才可通过F键控制门门的开关。
- 上面的是接触触发框,下面的是结束接触触发框,也就是走出了触发框的范围
- 这个是获取玩家,就是我们操控的小人
- 这个是启动键盘输入。在一个蓝图类中,直接按F键是不能被接收的,只有在关卡蓝图中可以直接接收的。这给允许键盘输入的对象就是2中的我们获取的玩家
- 判断是否等于0。这判断的就是门店开关状态,0为门是关着的。
- 获取状态包括位置,旋转,缩放;这里只获取旋转中的Z轴。目标就是我们所需要获取数据的对象,这里是我们需要开关的门。
- 分支,就是接收4的判断结果,如果为0就是真true,不为0就是假false。
- 打印字符串,通过前面的判断,门的角度为0度时,门是关着的,这时接触触发框显示开门,false则是关门
- 键盘输入F
- Gate,就相当于一个通道,这个通道关了,想要通过(enter)就要先打开(open)它.这里打开的条件就是接触到触发框Box,只有走进触发框范围才可以通过F控制门的开关。close就是关闭这个通道,toggle就是在开关通道之间切换。
- Flip Flop,这个就是在A和B输出之间轮替,从A开始。
- 开关门的过程
- 设置门的状态
拾取钥匙开门
创建两个蓝图类,一个表示钥匙(BP_Key)一个是门(BP_Door1)。
分别打开两个蓝图类,在视口中搭建模型,在钥匙蓝图中可以创建一个球型触发框包裹住球,然后搭建场景
然后在事件图表中绘制蓝图
首先是在门(BP_Door1)的事件图表中编辑,逻辑与F键开门大致相同,不过添加了个布尔变量的判断,是否可以开门,就是是否捡到钥匙。这给布尔变量可以在我的蓝图窗口中创建,初始值设为False,就是没有捡到钥匙。
当靠近门时,进入了触发框就启用了键盘输入。按F后,对是否可以开门进行判断,为真则可以开门,假就输出字符串提示缺少钥匙。
然后是钥匙的逻辑,前面与门大致相同,一样是接触触发框启用输入,打印字符串提示,F拾取钥匙。不过在这里面需要对门的蓝图类中的是否可以开门的布尔变量进行修改,当拾取了钥匙后,布尔变量变为真(true),以便可以开门。
但钥匙和门不是同一个蓝图类,那么这就需要一个获取类所有actor的命令来获取场景中的门。在ActorClass可以选择门的蓝图类(BP_Door1),由于场景中我们只放了一扇门,所有GET那的数字用0。设置是否可以开门变量。
销毁钥匙使在场景中消失,打印提示。
演示: