我正在开发一款与光子融合相结合的 2D 多人游戏。我的播放器的默认播放速度为 5f。当我希望玩家在特定持续时间内移动得更快时,我会更改玩家速度(至 10f)。后来我希望我的玩家以默认速度移动。速度的变化会导致运动不平稳,尤其是对客户而言。当速度从默认更改为 10f 时,会发生急动,速度 10f 的运动在特定持续时间内很好,而当速度从 10f 更改为默认时,会再次出现急动。我相信速度的突然剧烈变化是被错误预测的,而纠正这个预测值是导致运动不平稳的原因。
以下是我的代码的一部分:
using UnityEngine;
using Fusion;
public class Player : NetworkBehaviour
{
[Networked] public float PlayerSpeed { get; set; }
public override void Spawned()
{
RPC_SetPlayerSpeed(5f);
}
public override void FixedUpdateNetwork()
{
// below is psuedo code
if (LShiftPressed)
{
RPC_SetPlayerSpeed(10f);
}
if (TimerIsDone)
{
RPC_SetPlayerSpeed(5f);
}
}
[Rpc(RpcSources.All, RpcTargets.All)]
public void RPC_SetPlayerSpeed(float speed)
{
PlayerSpeed = speed;
}
}
PlayerRigidbody.MovePosition(PlayerRigidbody.position + movement * Runner.DeltaTime);
- 这就是我移动播放器的方式。
在客户端,输入权限将调用RPC_SetPlayerSpeed来更改网络速度。
我尝试将 NetworkRigidbody2d 组件插值到光子融合中所有可用的插值数据源(自动、快照、预测、无插值)。我错过了什么?
要实现物体的平滑运动,一般不能直接改变其速度,而是采用插值(Lerp)方法。