Я делаю бильярдную игру, и я хочу реализовать в ней многопользовательский режим. Поскольку обновление движения в каждом кадре неэффективно и неаккуратно, я думал, что смогу переделать события в игре во всех клиентах, но по какой-то причине они отличаются друг от друга.Unity3D: события синхронизации фотонной синхронизации
Направление, которое запускает мяч, является правильным, но оно начинает отличаться для разных пользователей, когда оно сталкивается с другими шарами (если оно сталкивается только со стеной, это прекрасно). Технически это не должно происходить ИМО.
Это код, я использую, чтобы добавить силу к игроку мяч:
Я использую это, чтобы запустить мяч игрок
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;
}
}
}
Я ценю всю предоставленную помощь, не стесняйтесь задавать мне какие-либо вопросы.
Физическое моделирование, используемое в Unity, не является детерминированным. Вы не можете ожидать одинаковых результатов для разных клиентов. Вот почему вам нужно симулировать только на одном клиенте (с помощью свойства Rigidbody.isKinematic) и отправлять результаты другим. Подробнее см. PUN DemoBoxes. – photonians