玩家速度的变化会导致统一光子融合多人游戏中出现抖动

问题描述 投票:0回答:1

我正在开发一款与光子融合相结合的 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 组件插值到光子融合中所有可用的插值数据源(自动、快照、预测、无插值)。我错过了什么?

c# unity-game-engine photon
1个回答
0
投票

要实现物体的平滑运动,一般不能直接改变其速度,而是采用插值(Lerp)方法。

© www.soinside.com 2019 - 2024. All rights reserved.