我有一台服务器依赖的多人Unity3D游戏,其中服务器是用Node.js编写的。服务器向玩家的位置发送更新,并且玩家向客户端上的那些位置发送lerp以模拟平滑移动。我没有使用Unity物理进行玩家移动。我每秒大约有20个数据包更新,因此我使用每个更新之间的时间除以0.12秒的lerp间隔。
我用来计算玩家移动的deltaTime的代码是:
lerpValue = Mathf.Clamp01((DateTime.UtcNow.Millisecond - lastPacket.UpdateTime) / 120;
myTransform.position = Vector3.Lerp (myTransform.position, lastPacket.Pos, lerpValue);
这似乎可以平滑玩家的运动,但是我无法让相机始终如一地顺利跟随玩家。我在LateUpdate中使用Time.deltaTime进行相机平滑。这使它变得不稳定,生涩和口吃。我也希望相机在播放器后面稍微有点掠过,所以如果玩家运动结果不合适,那么相机就没有了。
我尝试打开和关闭VSync,将播放器移动到FixedUpdate,然后将相机从LateUpdate移动到FixedUpdate,我正在寻找更多建议。