2016-05-03 14 views
1

ユニティ5 UNETを使っていくつかのマルチプレイヤーゲームをコーディングする間に立ち往生します。 は、現在ユニティ5.1と連携しており、ネットワーク経由でゲームオブジェクトの子トランスフォームを同期したいと考えています。ユニティ5 UNETマルチプレイヤーコード

問題は、すべてのクライアントが子トランスフォームをサーバーに同期する要求を送信していることです。サーバーは他のクライアントと子トランスフォームを沈めていません。

コンポーネントがユニティ5.2であると聞いていますが、私はユニティ5.1で作業していると言っているので、5.1のソリューションが必要です。

ここは私のコードです。

あなたは、サーバー上の各接続されたクライアント/プレーヤーの「影のオブジェクト」を作成し、antoehrリモートオブジェクトの位置をrepreseningこれらのオブジェクトを移動させることができ、応答

using UnityEngine; 
using UnityEngine.Networking; 
using System.Collections; 

public class Sync_Position : NetworkBehaviour 
{ 
    [SyncVar] 
    Vector3 []sync_pos; 

    [SerializeField] Transform []obj; 
    [SerializeField] int lerp_rate; 

    Vector3 []last_pos; 
    float threshold=5; 

    void Start() 
    { 
     sync_pos= new Vector3[obj.Length]; 
     last_pos= new Vector3[obj.Length]; 
    } 

    // Update is called once per frame 
    void FixedUpdate() 
    { 
     transform_pos(); 
     lerp_pos(); 
    } 

    void lerp_pos() 
    { 
     if(!isLocalPlayer) 
     { 
      for(int i=0;i<obj.Length;i++) 
      { 
       if(Vector3.Distance(obj[i].localPosition,sync_pos[i]) > 1) 
       { 
        obj[i].localPosition=sync_pos[i]; 
       } 
      } 
     } 
    } 

    [Command] 
    void Cmd_for_pos(Vector3 p, int index) 
    { 
     sync_pos[index]=p; 
    } 

    [ClientCallback] 
    void transform_pos() 
    { 
     if(isLocalPlayer) 
     { 
      for(int i=0;i<obj.Length;i++) 
      { 
       if(Vector3.Distance(obj[i].localPosition,last_pos[i]) > threshold) 
       { 
        Cmd_for_pos(obj[i].localPosition,i); 
        last_pos[i]=obj[i].localPosition; 
       } 
      } 
     } 
    } 
} 

答えて

0

のために楽しみにして。

私はこのチュートリアルをチェックすることをお勧めします。これは私が自分自身をUNETに取り入れるためです。

https://www.youtube.com/watch?v=NLnzlwCRjgc 
関連する問題