public GameObject InstantiateNetworkObject(string prefabName, int playerId, Vector3 pos, Quaternion rot) { ushort i = 0; GameObject obj = null; if (Thread.CurrentThread == mainThread) { obj = Instantiate(NetworkInfo.GetNetworkPrefabByName(prefabName), pos, rot); //obj.SetActive(false); while (ObjectsInWaiting.ContainsKey(i)) { i++; } ObjectsInWaiting.Add(i, obj); } else { UnityThread.executeInUpdate( () => { print("search for " + prefabName); foreach (var p in NetworkInfo.networkPrefabs) { print(p.name); } print(NetworkInfo.GetNetworkPrefabByName(prefabName) + " " + NetworkInfo.networkPrefabs.Length); obj = Instantiate(NetworkInfo.GetNetworkPrefabByName(prefabName), pos, rot); //obj.SetActive(false); while (ObjectsInWaiting.ContainsKey(i)) { i++; } ObjectsInWaiting.Add(i, obj); }); } ObjectData data = new ObjectData(playerId, -1, NetworkInfo.GetNetworkPrefabId(prefabName), new Position(pos.x, pos.y, pos.z), new Rotation(rot.x, rot.y, rot.z, rot.w)); NetDataWriter writer = new NetDataWriter(); writer.Put((ushort)101); writer.Put(i); writer.PutBytesWithLength(data.ToByteArray()); Send(writer, DeliveryMethod.ReliableOrdered); return(obj); }