我正在研究 NetworkServer/NetworkClient 之间的统一网络。我不使用网络管理器
这是我的客户代码的一部分。
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)
根本不起作用的原因。可能的原因是什么?- 上面的代码也有问题。
NetworkServer.SendToAll(mspType, msg)
每当导致colsole 错误消息
ArgumentException:您要实例化的对象为空。
我不明白为什么 newPrefab.p 为空......对于网络编程新手有什么想法吗?