2016-09-22 8 views
2

私はビリヤードゲームを作っています。私はマルチプレイヤーを実装したいと思っています。すべてのフレームで動きを更新するのは非効率的で遅れているので、ゲーム内のイベントをすべてのクライアントでリメイクできると思ったが、何らかの理由でそれらがお互いに異なる。Unity3D:Photon syncing physics events

ボールが起動する方向は正しいが、他のボールと衝突したときに異なるユーザーになり始める(壁にしか衝突しない場合)。技術的には、これは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

Unityで使用される物理シミュレーションは確定的ではありません。異なるクライアントで同じ結果を期待することはできません。そのため、(Rigidbody.isKinematicプロパティの助けを借りて)単一のクライアントでのみシミュレーションし、他の人に結果を送信する必要があります。詳細については、PUN DemoBoxesを参照してください。 – photonians

答えて

0

ユニティフィジックスエンジンは決定的ではありません(つまり、結果はすべてのコンピュータで常に同じとは限りません)。オブジェクトの実際の位置は同期しなくなる可能性があります。