2016-09-22 2 views
2

Я делаю бильярдную игру, и я хочу реализовать в ней многопользовательский режим. Поскольку обновление движения в каждом кадре неэффективно и неаккуратно, я думал, что смогу переделать события в игре во всех клиентах, но по какой-то причине они отличаются друг от друга.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; 
      } 
     } 

    } 

Я ценю всю предоставленную помощь, не стесняйтесь задавать мне какие-либо вопросы.

+0

Физическое моделирование, используемое в Unity, не является детерминированным. Вы не можете ожидать одинаковых результатов для разных клиентов. Вот почему вам нужно симулировать только на одном клиенте (с помощью свойства Rigidbody.isKinematic) и отправлять результаты другим. Подробнее см. PUN DemoBoxes. – photonians

ответ

0

Физический движок Unitys не является детерминированным (т.е. результаты не всегда одинаковы на всех компьютерах) - фактические положения объектов могут не синхронизироваться.

Смежные вопросы