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.
- Der Grund, warum ich
NetworkServer.SendToAll(msgType, msg)
stattNetworkServer.Spawn(obj)
ist überhaupt nicht selbst gearbeitet hat, wenn es keine Konsole Fehler war. Was sind mögliche Gründe dafür? - 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?
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)? –