UE4联网游戏——蓝图优化——将按键持续事件优化成按需事件

本篇难度较低,适合对UE引擎有半年-1年左右的初学者

案例:

我想要制作一个按下键盘,小车向前走的功能。我们通常会这么做,如下图
UE4联网游戏——蓝图优化——将按键持续事件优化成按需事件_第1张图片

思考:

UE4的InputAxis是个持续不停的帧事件,按下键盘小车往前走,并把事件信息发给各个客户端,如果每帧都做按键事件,那么网络通讯的工作量会很大,希望能“按需发送事件”,只有我们按下键盘时再发送。于是请看下面优化方案:
UE4联网游戏——蓝图优化——将按键持续事件优化成按需事件_第2张图片

优化方案:

将InputAxisMoveForward的持续帧事件(60fps),判断一下,非0再发送的事件,默认0状态不发送,将压力留在本地中,不传递给网络。非0期间每间隔 KeyAxisDuration=0.05 秒执行一次,避免网络带宽占用。以实现“按需事件”。

但也发现一个新问题:每一次控制器松手,复位归“0”只有一次。测试中有一定概率会出现键盘松手后,小车依旧向前不停走的现象。
分析后发现,是松手释放的网络信号传输失败,导致小车没有收到松手指令。

改进方案:

我们是不是可以执行两次指令,发送两次指令增加成功率。第二次用Delay,延迟一些时间。用变量KeyAxisDuration表示时间,以确保成功,如下图。

UE4联网游戏——蓝图优化——将按键持续事件优化成按需事件_第3张图片

在这里插入图片描述
其中延迟时间KeyAxisDuration变量默认给0.05,即每秒20次,其实也可以给0.1降低频率,节省网络通信资源。
经测试,可靠性大大增强,在20次测试中当KeyAxisDuration=0.05时只出现了一次丢失问题,调整为0.1时,无问题发生,有一丝一毫的延迟感,调整为0.2时,稍稍有控制延迟感。

延伸:

推测可否这样做?战士行走的频率可以尝试给0.2,中间卡帧用插值动画。因为人类不可能一秒钟迈步超过5步。人类的移动是以迈步距离为单位的。落脚点才是关键帧位置。

你可能感兴趣的:(游戏开发,虚幻引擎,ue4,游戏)