Networking Unity3D:光子同步物理事件

Networking Unity3D:光子同步物理事件,networking,unity3d,physics,multiplayer,photon,Networking,Unity3d,Physics,Multiplayer,Photon,我正在做一个台球游戏,我想在其中实现多人游戏。由于更新每一帧中的运动是低效和滞后的,我想我可以重新制作游戏中发生在所有客户端的事件,但由于某些原因,它们彼此不同 球的发射方向是正确的,但当它与其他球碰撞时,不同用户的发射方向会有所不同(如果它只与墙碰撞,则没有问题)。从技术上讲,这不应该发生 这是我用来给球员球加力的代码: 我用这个来发射球员的球 photonView.RPC("FireBall", PhotonTargets.All, storedDirection, power); 这是向

我正在做一个台球游戏,我想在其中实现多人游戏。由于更新每一帧中的运动是低效和滞后的,我想我可以重新制作游戏中发生在所有客户端的事件,但由于某些原因,它们彼此不同

球的发射方向是正确的,但当它与其他球碰撞时,不同用户的发射方向会有所不同(如果它只与墙碰撞,则没有问题)。从技术上讲,这不应该发生

这是我用来给球员球加力的代码:

我用这个来发射球员的球

photonView.RPC("FireBall", PhotonTargets.All, storedDirection, power);
这是向球员球添加力的功能

[PunRPC]
    public void FireBall(Vector3 stordDir , float poww)
    {
        rigidbody.AddForce(stordDir.normalized * poww, ForceMode.Impulse);
    }
我使用这个函数来获得玩家想要的方向

public void UpdateStickPosition()
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
        { 
            if (Input.GetKeyDown(KeyCode.Mouse0)  
            {
                storedDirection = hit.point - transform.position;
            }
        }

    }

感谢所有帮助,请随时问我任何问题。

Unitys物理引擎不是确定性的(即,并非所有计算机上的结果都是相同的)-对象的实际位置可能会不同步。

使用光子API将球实例化为网络对象。我认为如果你这样做,它应该在所有玩家之间同步它的属性,包括任何位置/物理变化

示例代码: photonNetwork.Instantiate(名称、变换.位置、变换.旋转,0)

查看他们的手册。

Unity中使用的物理模拟不是确定性的。在不同的客户机上不能期望相同的结果。这就是为什么您只需要在单个客户机上进行模拟(借助Rigidbody.IsKinetic属性)并将结果发送给其他客户机的原因。有关详细信息,请参见双关演示框。试着突出显示关键词,并明确其格式,这将有助于向其他人提供答案