2017-05-13 6 views
0

私はUnityのネットワーク機能を使い始めていますが、オブジェクトを生成しようとしている間に問題が発生しました。私は文書がhereの後に簡単なデモを作成しようとしましたが、サーバは毎秒色が変わるオブジェクトを生成し、接続された各クライアントはこのオブジェクトと色の変化を見るべきです。クライアント/サーバーは接続していますが、オブジェクトはサーバー側にのみ表示されます(エラーメッセージなし)。オブジェクトのみを生成するサーバ側[NetworkServer/NetworkClient]

Client.cs

public class Client : MonoBehaviour 
{ 
    public GameObject boxPrefab; 

    private NetworkClient networkClient; 

    private static void OnConnected(NetworkMessage networkMessage) 
    { 
     Debug.Log(string.Format("[ID: {0}] Connected.", networkMessage.conn.connectionId)); 
    } 

    private void Start() 
    { 
     networkClient = new NetworkClient(); 

     ClientScene.RegisterPrefab(boxPrefab); 
     networkClient.RegisterHandler(MsgType.Connect, OnConnected); 
     networkClient.Connect("127.0.0.1", 5172); 

     Debug.Log("Connecting..."); 
    } 
} 

Server.cs

public class Server : MonoBehaviour 
{ 
    public BoxSpawner boxSpawner; 

    private void OnConnection(NetworkMessage networkMessage) 
    { 
     Debug.Log(string.Format("[ID: {0}] Connected.", networkMessage.conn.connectionId)); 
    } 

    private void Start() 
    { 
     NetworkServer.RegisterHandler(MsgType.Connect, OnConnection); 
     NetworkServer.Listen("127.0.0.1", 5172); 
     Debug.Log("Listening..."); 

     NetworkServer.SpawnObjects(); 
     boxSpawner.Spawn(); 
    } 
} 

BoxSpawner.cs

public class BoxSpawner : NetworkBehaviour 
{ 
    public GameObject boxPrefab; 

    public void Spawn() 
    { 
     GameObject box = (GameObject) Instantiate(boxPrefab, transform.position, transform.rotation); 
     NetworkServer.Spawn(box); 
    } 
} 

クライアントとサーバの両方に、NetworkIdentityコンポーネントとともに、次のスクリプトを持つBoxという名前のプレハブがあります。

Box.cs

public class Box : NetworkBehaviour 
{ 
    [SyncVar] 
    private Color32 color; 

    private IEnumerator ChangeColour() 
    { 
     while (true) 
     { 
      color = new Color32((byte)Random.Range(0, 255), (byte)Random.Range(0, 255), 
       (byte)Random.Range(0, 255), 255); 
      yield return new WaitForSeconds(1.0f); 
     } 
    } 

    private void Start() 
    { 
     if (isServer) 
     { 
      StartCoroutine(ChangeColour()); 
     } 
    } 

    private void Update() 
    { 
     GetComponent<SpriteRenderer>().color = color; 
    } 
} 

私は誰かが見て、私の手を与えることができれば、私は本当にしたい、GitHubのリポジトリhereに両方のクライアント/サーバー・プロジェクトをもアップロードしましたありがとう、ありがとう。

注:NetworkManagerを使用せずにこれを達成しようとしています。

答えて

0

あなたのコードを非常に素早く見て、私はそれが理由であるかわからないものを見ることができますが、クライアントにboxPrefabを登録します。それは私が推測するだろうサーバー上で行う必要があります。

関連する問題