同步球问题-光子

时间:2019-07-18 09:06:59

标签: c# unity3d 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); }

我真的不明白这里可能是什么问题。我能想到的一个问题是在NonFixedUpdate()中添加力,这样当客户踢球时可能导致怪异的球运动。任何人都可以帮助我,或者给我一些指导,以解决我可以解决或解决此类问题的其他方法吗?谢谢!

“球的行为很奇怪”:我的意思是,当任何非主要客户球员踢球时,每个客户都会以不同的方式体验球的运动(就像球不够平滑,对于某些人来说,即使通过RPC调用施加的方向和作用力相同,速度也足够快,并且某些球在移动时会滞后。我知道这可能是因为不同的客户端系统执行了不同的计算。但是我需要为所有连接的客户端进行平滑处理,并使其效率足够高(球需要以相同的速度/力移动)。寻找可以解决此问题的方法。任何指导表示赞赏。非常感谢您的宝贵时间。

2 个答案:

答案 0 :(得分:0)

建议将ShootBallRPC调用仅发送到主客户端,计算并控制球在主客户端上的位置,然后将其实时同步到其他客户端(通过photonview)。

答案 1 :(得分:0)

这对我有用。当球员踢球时,转移所有权

void OnCollisionEnter2D(Collision2D col) {

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