Example #1
0
    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);
    }