0
我正在研究NetworkServer/NetworkClient之間的統一網絡。我不使用NetworkManagerUnity NetworkServer/NetworkClient傳輸GameObject
這是我的客戶端代碼的一部分。
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++;
}
這是我的服務器代碼的一部分。
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);
}
}
我有兩個問題。
- 爲什麼我用
NetworkServer.SendToAll(msgType, msg)
代替NetworkServer.Spawn(obj)
是沒有工作,即使沒有控制檯錯誤可言的原因。這可能是什麼原因? - 上面的代碼也有問題。該colsole錯誤味精每當
NetworkServer.SendToAll(mspType, msg)
導致
的ArgumentException:要實例化對象爲空。
我不明白爲什麼newPrefab.p爲空.... 任何想法爲新手的網絡編程?
如果我想將服務器代碼與客戶端代碼分開,該怎麼辦?應該在哪裏存儲預製件?在雙方(它似乎並不好)? –