UE4的盒体触发器和时间轴(制作感应门)

一、盒体触发器(Box Trigger)

1. 创建一个盒体触发器(Box Trigger),拖动到地面上空,按End键,贴近地面。

2. 选中盒体触发器,在关卡蓝图中添加 On Actor Begin Overlap 事件(进入盒体触发器事件)
a. Overlapped Actor 代表 盒子触发器
b. Other Actor 代表 进入触发器的物体

3. Overlap 相交、重叠,当人物碰触或走到区域时,可以触发事件。

4. On Actor End Overlap 节点可以在人物离开区域时触发事件。

二、感应门 (人到门开)

1. 定义大门

添加两个设置成门状(scale x=0.2,z=4)的Cube,LeftDoor和RightDoor作为大门。

2. 定义是否开门

添加Bool变量Moving。设定true为开门,false为停止。

3. 定义开门动作

添加Event Tick 事件,指向 Branch (分支)节点,将Moving作为Branch的条件,如果为true,则执行两个序列:序列1,将LeftDoor的 Add Actor Local Offset 节点中的 y 设置为 -1;序列2,将RightDoor的 Add Actor Local Offset 节点中的 y 设置为 1。

4. 定义触发器的事件

将盒体触发器的 On Actor Begin Overlap 节点上触发后设置Moving=true; OnActorEndOverlap 节点上触发后设置Moving=false。

5. 设置停止开门的条件

在第一个Branch节点后再添加一个Branch节点,条件为右侧(或左侧)门的当前y轴位置是否小于(或大于)指定值,若条件为假(门移动到最大位置),则设置Moving=false。若条件为真,则执行上面的序列。

6. 设置门的开启在不同电脑上用时相同

因为不同的电脑FPS值不同,因此触发Event事件的次数不同,开门耗时不同。因此可以通过EventTick事件的Delta Seconds属性,乘以位置偏移量(使用Vector * float节点),再赋值给Add Actor Local Offset 的Delta Location属性。这个结果就是以1秒钟为单位偏移的数值,能保证不同的FPS每一秒移动的距离都是相同的。

三、通过时间轴和Lerp(差值计算)实现人过门开

1. 创建场景

定义两个门LeftDoor和RightDoor和一个盒体触发器Box Trigger。

2. 添加时间轴
a. 击右键创建一个时间轴(Timeline),修改名称为 Timeline Open Door。
b. 双击时间轴,进入编辑界面,添加Float类型的轨迹,长度为2,代表总时间为2秒,修改名称为Door Alpha。
c. 使用Shift+鼠标左键在轨迹上添加两个点,分别是(0,0)和(2,1)。前数代表时间,后数代表值,代表从0秒开始计算到2秒的时间内,输出从0逐渐到1的Float类型的值,次数和增长率根据电脑性能计算。本功能使用时间轴作为输出从0到1的百分比。从(0,0)到(3,1)就是三秒时间从0到1。

d. 回到事件图表,可见时间轴函数上增加了Door Alpha属性。

3. Timeline函数的属性
a. Play (Event) 从当前状态开始播放
b. Play from Start (Event) 从开始状态开始播放
c. Stop (Event) 停止播放
d. Reverse (Event) 从当前状态反向播放
e. Reverse from End (Event) 从结束状态反向播放
f. Set New Time (Event) 设置物体呈现指定时间点的状态
g. New Time (F) 指定时间点秒数,可以从指定时间点开始播放。
h. Update (Event) 更新触发程序出口,时间轨迹中会不断调用此方法
i. Finished (Event) 完成后触发程序出口
j. Direction (Emun) 播放方向,输出枚举类型,可以使用工具->枚举->逻辑判断函数来输出布尔值,Forward为正向,Backward为反向
k. Door Alpha (F) 自定义的时间轨迹,本功能中表示值为2秒的时间内从0到1的Float值。

4. 添加差值计算函数来实现从快到慢的位移效果
a. 添加Lerp节点,包含A、B和Alpha三个参数,并返回A+(B-A)*Alpha的值。
b. Alpha 代表 从A到B的绝对路径百分比,Lerp返回从A到B并以Alpha为百分比的值
c. 设置A、B的值,例如A=2,B=0,Alpha设置为Door Alpha,则Lerp节点的值会从A(2)在时间轴结束时间(1秒)后变为B(0)。也就是说每次的位移从2趋近于0,B越接近零位移越慢,反之则越快,若A=2,B=-2则位移会先移动当Alpha=0.5时停止,然后返回原来位置。
d. 定义Make Vector,并设置y的值为Lerp节点的Return Value。
e. 将Vector赋值给Add Actor Local Offset 节点的Delta Location

5. 添加触发事件和位移响应函数
a. 盒体触发器的 On Actor Begin Overlap指向 时间轴的Play
b. 时间轴的Update指向左右两门的Add Actor Local Offset。
c. 左门的Lerp节点 A=-2,B=0;右门的Lerp节点A=2,B=0。

6. 计算机平台通用性设置

由于时间轴的调用与FPS有关系,因此可以将Lerp的位移量增大,比如说右门的A=60,B=0,Return Value与 Get World Delta Seconds的Return Value相乘,其结果设置为位移的y值,则不同计算机在每一秒后的位移就会一致。

四、实现人过门开,人走门关,动画平滑且移动位置可控

1. 创建场景

定义两个门LeftDoor和RightDoor和一个盒体触发器Box Trigger。

2. 添加时间轴
a. 击右键创建一个时间轴(Timeline),修改名称为 Timeline Open Door。
b. 双击时间轴,进入编辑界面,添加Float类型的轨迹,长度为2,代表总时间为2秒,修改名称为Door Alpha。
c. 使用Shift+鼠标左键在轨迹上添加两个点,分别是(0,0)和(2,1)。
d. 右键点击轨迹点,选择auto,使得轨迹线平滑,这样可以使得门开关动作变得平滑。
e. 回到事件图表,可见时间轴函数上增加了Door Alpha属性。

3. 添加Lerp节点

设置A为起始位置,设置B为停止位置,Alpha为Door Alpha。

4. 使用Set Actor Location 节点设置物体位移

Make Vector节点x为物体原x,z为物体原z,y为Lerp节点的Return Value,并设置为Set Actor Location 节点的New Location 属性。

5. 添加响应事件

盒体触发器的On Actor Begin Overlap指向时间轴的Play接口,On Actor End Overlap指向Reverse接口,则进入触发器门开,离开触发器门关。

五、时间轴的其他轨迹

1. 事件轨迹

在时间轴上可以添加事件轨迹,起名为Event,Shift+鼠标左键可以指定一个时间点(仅设置时间即可,值无关紧要),在关卡蓝图的时间轴上会出现Event接口,可以在指定时间点运行其他节点。

2. 颜色轨迹

颜色轨迹可以实现灯光的变换功能。

六、盒体触发器的碰撞事件

1. 将盒体触发器变成可触发状态
a. 选中盒体触发器,在细节->碰撞->碰撞预设值中将Trigger模式修改成BlockAll模式(允许所有碰撞)。
b. 将Simulation Generates Hit Events(模拟生成碰撞事件)设置为true。

2. 选中盒体触发器,在关卡蓝图中添加碰撞事件
a. Self Actor 盒体触发器对象
b. Other Actor 碰撞发起物体对象
c. Normal Impulse 碰撞冲量
d. Hit 碰撞对象,可以连接 Break Hit Result节点展开所有碰撞对象的属性


版权声明:本文为CSDN博主「幽冥丶虾米」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_14930205/article/details/78548587

最新文章