2017-05-03 3 views
0

Ich arbeite an Einheit Netzwerk zwischen NetworkServer/NetworkClient. Ich verwende nicht NetworkManagerUnity NetworkServer/NetworkClient Übertragung GameObject

Hier ist ein Teil meines Code des Clients.

public void StartPaintClient() 
{ 
    client = new NetworkClient(); 
    client.Connect(host, port); 
    client.RegisterHandler(NetworkMeta.PaintPrefabId, OnMouseButtonDown); 
} 
public void OnMouseButtonDown(NetworkMessage netMsg) 
{ 
    var receivedPrefab = netMsg.ReadMessage<NetworkMeta.PaintPrefab>(); 
    GameObject prefab = Instantiate(receivedPrefab.p); 
    prefab.name = "" + index++; 

} 

Hier ist Teil meines Codes des Servers.

public GameObject prefab; 
public void StartPaintServer() 
{ 

    if (NetworkServer.active) 
    { 
     Debug.Log("Server is already acitve"); 
     return; 
    } 
    NetworkServer.Listen(port); 
} 
void Update() 
{ 
    if(Input.GetMouseButtonUp(0)) 
    { 
      prefab = Instantiate(Line_Prefab); 
      var newPrefab = new NetworkMeta.PaintPrefab(); 
      newPrefab.p = prefab; 
      NetworkServer.SendToAll(NetworkMeta.PaintPrefabId, newPrefab); 
    } 
} 

Ich habe zwei Fragen.

  1. Der Grund, warum ich NetworkServer.SendToAll(msgType, msg) statt NetworkServer.Spawn(obj) ist überhaupt nicht selbst gearbeitet hat, wenn es keine Konsole Fehler war. Was sind mögliche Gründe dafür?
  2. Die obigen Codes haben ebenfalls Probleme. Der colsole Fehler msg, wenn NetworkServer.SendToAll(mspType, msg) verursacht

Argument: Das Objekt, das Sie instanziieren wollen, ist null.

Ich verstehe nicht, warum newPrefab.p null ist .... Jede Idee für einen Neuling von Netzwerk-Programmierung?

Antwort

0

Ich benutze Unet nicht und weiß nicht viel darüber, aber Sie müssen Folgendes tun, bevor Sie ein Prefab erzeugen.

.Das Prefab muss NetworkIdentity Skript angehängt haben.

. Sie müssen das Prefab registrieren, bevor Sie es spawnen können.

Networking.ClientScene.RegisterPrefab(Line_Prefab); 

dann können Sie NetworkServer.Spawn verwenden.

var line = (GameObject)Instantiate(Line_Prefab, pos, rot); 
NetworkServer.Spawn(line); 

Beachten Sie, dass ich bin nichtNetworkServer.Spawn direkt auf dem Fertig verwenden. Ich musste es auf dem GameObject verwenden, das mit (GameObject)Instantiate(Line_Prefab, pos, rot); erzeugt wurde.

Stellen Sie außerdem sicher, dass Sie Ihrer Variablen das Prefab aus dem Editor zugewiesen haben. Sie können mehr über Objekte im Netzwerk spoolen here lernen.

+0

Was ist, wenn ich den Servercode vom Clientcode trennen möchte? Wo sollte das Prefab gespeichert werden? auf beiden Seiten (es scheint nicht gut zu sein)? –

Verwandte Themen