球同步问题 - 光子

Ball Sync Issue - Photon

我正在同步一个球(比如球员踢球、射门或传球)。它对主客户端非常有效,在非主客户端上也同步得很好。问题是当任何非主客户端踢球时,同步不够准确,并且对于连接到房间的所有客户端来说,球的行为方式很奇怪。 当任何玩家客户端踢球时,我正在使用 RPC 调用来发送信息,以使用各自的方向和力参数为球增加力。 这是 RPC 调用。

this.photonView.RPC("ShootBallRPC", RpcTarget.All, direction, height, directionPower, heightPower); 

这是 RPC 方法。

private void ShootBallRPC(Vector3 direction, Vector3 height, float directionPower, float heightPower) { owner = null; rb.AddForce(((direction * directionPower) + (height * heightPower)), ForceMode.Impulse); }

我不太明白这可能是什么问题。我能想到的一个问题是在非 FixedUpdate() 中添加力,这样当客户端踢球时可能会导致奇怪的球运动。任何人都可以帮助我或给我一些指导,告诉我我可以做些什么来解决或解决此类问题?谢谢!

"ball behaves in a weird way":我的意思是,当任何非主客户端玩家踢球时,每个客户端都以不同的方式体验球的运动(比如不够流畅,有些人很快)足够了并且对于一些球在移动时滞后)即使通过 RPC 调用施加的方向和力是相同的。我知道这可能是因为不同的客户端系统进行了不同的计算。但是我需要对所有连接的客户端进行平滑处理并且足够高效(球需要以相同的 velocity/force 移动)。寻找解决此问题的方法。任何指导表示赞赏。非常感谢您的宝贵时间。

建议ShootBallRPC调用只发给master客户端,在master客户端计算并控制球的位置,然后实时同步给其他客户端(通过photonview)。

这适用于 me.When 球员踢球然后转让所有权

void OnCollisionEnter2D(Collision2D col) {

    if (PlayerPrefs.GetInt("OnlineMode") == 1)
    {
        if (col.gameObject.tag == "Player")
        {
            this.photonView.TransferOwnership(col.gameObject.GetComponent<PhotonView>().Owner);
        }
        
    }
}