2017-05-13 4 views
0

Ich versuche, mit den Vernetzungsfunktionen von Unity zu beginnen und habe ein Problem beim Versuch, Objekte zu erzeugen, festgestellt. Ich habe versucht, eine einfache Demo nach der Dokumentation gefunden gefunden here, der Server erzeugt ein Objekt, das jede Sekunde die Farbe ändert, jeder angeschlossene Client sollte dieses Objekt und seine Farbe sehen. Der Client/Server verbindet sich, aber das Objekt erscheint nur auf dem Serverende (keine Fehlermeldungen).Nur serverseitiges Objekt [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

Sowohl der Client als auch der Server verfügen über eine vorgefertigte Box mit dem folgenden Skript und einer NetworkIdentity-Komponente.

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; 
    } 
} 

ich auch sowohl die Client-/Server-Projekte zu einem GitHub-Repository here hochgeladen haben, wenn jemand einen Blick nehmen und geben Sie mir eine Hand würde ich wirklich schätze es, danke.

Hinweis: Ich versuche dies ohne Verwendung des NetworkManager zu erreichen.

Antwort

0

Wenn ich deinen Code sehr schnell anschaue, kann ich eine Sache sehen, die ich nicht weiß, ob das der Grund ist, aber du registrierst deine boxPrefab auf dem Client. das sollte auf dem Server gemacht werden, würde ich schätzen.

Verwandte Themen