客户端权威移动
主要应用于一些需要优先保证客户端游玩体验的PVE类型的游戏,通过客户端的权威移动来解决由于网络延迟等造成的玩家位移发生拖拽等问题。
核心思想是服务端关闭对玩家运动的模拟,客户端按照一定的频率上报自己当前的位置,服务器将玩家上报的位置转发给其他的客户端,其他客户端接收到服务器转发的位置信息后进行平滑插值来模拟该角色的运动过程。
注:使用引擎为UE4.27
基础的运动功能
新建一个UE4.27的第三人称模板工程,命名为ClientMovement,使用默认提供的AClientMovementCharacter并且继承自UCharacterMovementComponent创建一个UClientMovementComponent。
替换默认的运动组件
先继承出一个UClientMovementComponent,然后修改ClientMovementCharacter的构造函数,使用FObjectInitializer替换默认的CMC
1 | class AClientMovementCharacter : public ACharacter |
替换完成后重新编译并启动就可以在默认提供的角色蓝图中看到默认的CMC被替换为自行创建的CMC。
对UClientMovementComponent的修改
在UCharacterMovementComponent中可以找到一段注释,解释了CMC在服务端对客户端运动的重建以及纠正过程:
1 | /* |
UE在网络游戏架构下的运动系统为客户端预测+服务器校验回滚的模式,具体为当接收到移动输入后客户端会先运动并将运动信息上报给服务器,服务器根据客户端上报的运动信息模拟客户端并进行纠正,当客户端运动的位置于服务端模拟出的位置相差过大时会主动纠正客户端的位置。
因此要修改运动系统首先就要关闭服务器对客户端运动信息进行模拟的过程。
1 | class UClientMovementComponent : public UClientMovementComponent |
文件实现
1 |
|
完整源码
CMC
头文件
1 | // Fill out your copyright notice in the Description page of Project Settings. |
源文件
1 |
|
Character
头文件
1 | // Copyright Epic Games, Inc. All Rights Reserved. |
源文件
1 | // Copyright Epic Games, Inc. All Rights Reserved. |









