私はNetworkServer/NetworkClient間の単一ネットワークで作業しています。私はNetworkManagerを使用しませんGameObjectを転送するUnity 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);
}
}
私には2つの質問があります。
- 私が代わりに
NetworkServer.Spawn(obj)
のNetworkServer.SendToAll(msgType, msg)
を使用する理由は何もコンソールにエラーがなかった場合でも、全く働いていませんでした。その理由は何でしょうか? - 上記のコードにも問題があります。 colsoleエラーMSG
ArgumentExceptionが原因
NetworkServer.SendToAll(mspType, msg)
たび:あなたがインスタンス化したいオブジェクトがnullを。
なぜnewPrefab.pがnullであるのかわかりません.... ネットワークプログラミングの初心者のためのアイデアはありますか?
クライアントコードとサーバーコードを区別したい場合はどうすればよいですか?そのプレハブはどこに保管されるべきですか?両側で(それは良いと思われません)? –