Unity3D:光子同步物理事件

时间:2016-09-22 23:18:12

标签: networking unity3d physics multiplayer photon

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

球发射的方向是正确的,但是当它与其他球发生碰撞时(如果它只与墙碰撞它很好),它会因不同的用户而开始不同。从技术上讲,这不应该发生在IMO。

这是我用来向玩家球添加力量的代码:

我用它来发射球员

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;
            }
        }

    }

我感谢所有帮助,不要犹豫,问我任何问题。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

示例代码: “ photonNetwork.Instantiate(PrefabName,transform.position,transform.rotation,0);”

查看他们的手册。 https://doc.photonengine.com/en-us/pun/current/getting-started/pun-intro

相关问题