2017-05-11 2 views
0

私はマルチプレイヤーで車のゲームをしています。 すべて正常に動作し、マスターとクライアントが部屋に正常に接続しています。 (私はマルコポーロのチュートリアルを使用しています) 問題は、他の車が画面内を移動しているのを見たときに、車をテレポートすることで位置が更新されることです。いつも現れ、消える。私のコードのPhoton Unity3d:OnPhotonSerializeView()が動作しません

パート:が、私の光子のバージョンでは、私はより多くのオプションを持っている:私の車のプレハブで

PhotonNetwork.automaticallySyncScene = false; 

public class CNPlayerManager : Photon.MonoBehaviour 
{ 
... 
void FixedUpdate() 
    { 
     if (photonView.isMine) 
     { 
      //it works fine 
     } 
     else 
     { 
      transform.position= Vector3.Lerp(transform.position, this.correctPosition, Time.deltaTime * 5); 
      transform.rotation= Quaternion.Lerp(transform.rotation, this.correctRotation, Time.deltaTime * 5); 
     } 
    } 

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) 
{ 
    if (stream.isWriting) 
    { 
      stream.SendNext(transform.position); 
      stream.SendNext(transform.rotation); 

    } 
    else 
    { 
      this.correctPosition = (Vector3)stream.ReceiveNext();    //Line 100 
      this.correctRotation = (Quaternion)stream.ReceiveNext();  //Line 101 

    } 
} 

私PhotonViewはこのようなものです。所有者には、「実行時に設定」と「固定」があります。そして "観測されたコンポーネント"では、私は2つのコンポーネント、私の車のプレハブとスクリプトCNPlayerManagerを持っています。

私は2台の車で遊んでいるとき、最初の車で、時々このエラーが発生します: "IndexOutOfRangeException:配列インデックスが範囲外です。PhotonStream.ReceiveNext()..." 100行目。 2台目の車私は同じことを得る。

お願いします。

答えて

0

あなたが「車のプレハブを観察する」と言ったら、どういう意味ですか?この場合、位置と回転の同期を処理するので、CNPlayerManagerスクリプトを観察するだけで十分だと思います。

しかし、PUNパッケージに含まれているスクリプト、特にPhotonTransformViewスクリプトを見てみることをお勧めします。これはあなたが達成したいことを行います。また、あなたのニーズに最も適したものを確認して見ることができる同期オプションも提供します。

まだ問題が発生している場合はお知らせください。

関連する問題