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属性)并将结果发送给其他客户机的原因。有关详细信息,请参见双关演示框。试着突出显示关键词,并明确其格式,这将有助于向其他人提供答案