我正在制作一个台球游戏,我想在其中实现多人游戏。由于在每一帧中更新运动都是低效且滞后的,我认为我可以重新制作游戏中的事件发生在所有客户端,但由于某种原因它们彼此不同。
球发射的方向是正确的,但是当它与其他球发生碰撞时(如果它只与墙碰撞它很好),它会因不同的用户而开始不同。从技术上讲,这不应该发生在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;
}
}
}
我感谢所有帮助,不要犹豫,问我任何问题。
答案 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