2016-09-22 1 views
2

나는 당구 게임을 만들고있어 멀티 플레이어를 구현하고 싶다. 모든 프레임에서 동작을 업데이트하는 것이 비효율적이고 느리기 때문에 모든 클라이언트에서 게임의 이벤트를 다시 만들 수 있다고 생각했지만 어떤 이유로 인해 서로 다릅니다.Unity3D : Photon syncing physics events

볼이 시작되는 방향은 정확하지만 다른 볼과 충돌 할 때 사용자마다 다르기 시작합니다 (벽과 충돌하는 경우). 기술적으로 이것은 일이 일어나서는 안됩니다.

내가 플레이어의 볼에 힘을 추가하는 데 사용하는 코드입니다 :

내가 플레이어의 볼

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

유니티 물리 엔진이 결정적이지 않습니다 (즉, 결과가 모든 컴퓨터에서 항상 동일하지는 않음) - 개체의 실제 위치가 동기화되지 않을 수 있습니다.