internal NetworkViewBase _Create(string localPrefab, NetworkInstantiateArgs args, NetworkMessage msg)
        {
#if UNITY_BUILD
            Profiler.BeginSample("Instantiate prefab: " + localPrefab);
#endif

            // TODO: if server then validate viewID is owned by player!

            if (String.IsNullOrEmpty(localPrefab))
            {
                Log.Debug(NetworkLogFlags.Instantiate, "Skipping instantiate of empty prefab with ", args.viewID, " (in ", args.group, "), owner ", args.owner);

#if UNITY_BUILD
                Profiler.EndSample();
#endif
                return(null);
            }

            Log.Debug(NetworkLogFlags.Instantiate, "Instantiate prefab '", localPrefab, "' with viewID ", args.viewID, " (in ", args.group, "), owner ", args.owner, ", position ", args.position, ", rotation ", args.rotation);

            // TODO: why do we do this? We aren't removing the old instantiate from the RPC buffer so is this even safe?
            NetworkViewBase nv = _FindNetworkView(args.viewID);
            if (nv.IsNotNull())
            {
                _DestroyNetworkView(nv);
            }

            var info = new NetworkMessageInfo(msg, null);
            nv = OnCreate(localPrefab, args, info);

#if UNITY_BUILD
            Profiler.EndSample();
#endif
            return(nv);
        }
Ejemplo n.º 2
0
        protected override NetworkViewBase OnCreate(string prefabName, NetworkInstantiateArgs args, NetworkMessageInfo info)
        {
            var instantiator = NetworkInstantiator.Find(prefabName);
            var creator      = instantiator.creator;

            if (creator != null)
            {
                Log.Debug(NetworkLogFlags.Instantiate, "Calling creator for prefab '", prefabName, "' with viewID ", args.viewID, " (in ", args.group, "), owner ", args.owner, ", position ", args.position, ", rotation ", args.rotation);

                Profiler.BeginSample("Calling Creator");
                var nv = creator(prefabName, args, info);
                Profiler.EndSample();

                if (!nv.IsNullOrDestroyed())
                {
                    nv.instantiator = instantiator;

                    if (nv.viewID != args.viewID)
                    {
                        Log.Warning(NetworkLogFlags.Instantiate, "Creator failed to correctly setup the ", nv, ", which is it's responsibility. Please make sure your custom NetworkInstantiator is calling NetworkInstantiatorUtility.Instantiate or NetworkInstantiateArgs.SetupNetworkView.");
                    }

                    return(nv);
                }

                Log.Error(NetworkLogFlags.Instantiate, "Creator for prefab '", prefabName, "' failed to return a instantiated NetworkView!");
                return(null);
            }

            Log.Error(NetworkLogFlags.Instantiate, "Missing Creator for prefab '", prefabName, "'");
            return(null);
        }
Ejemplo n.º 3
0
    private uLink.NetworkView Creator(string prefabName, uLink.NetworkInstantiateArgs args, uLink.NetworkMessageInfo info)
    {
        uLink.NetworkView instance;

        if (pool.Count > 0)
        {
            instance = pool.Pop();

            args.SetupNetworkView(instance);

#if UNITY_4_0
            instance.gameObject.SetActive(true);
#else
            instance.gameObject.SetActiveRecursively(true);
#endif
        }
        else
        {
            instance = uLink.NetworkInstantiatorUtility.Instantiate(prefab, args);
        }

        uLink.NetworkInstantiatorUtility.BroadcastOnNetworkInstantiate(instance, info);

        return(instance);
    }
Ejemplo n.º 4
0
    /*
     * private uLink.NetworkView PreInstantiator(string prefabName, Vector3 position, Quaternion rotation, uLink.BitStream stream)
     * {
     *      if (Pool.Count > 0)
     *      {
     *              uLink.NetworkView instance = Pool.Pop();
     *              instance.transform.position = position;
     *              instance.transform.rotation = rotation;
     *              //instance.gameObject.SetActive(true);
     *
     *  //Debug.Log("PreInstantiator " + instance.name);
     *
     *              return instance;
     *      }
     *      else
     *      {
     *              uLink.NetworkView instance = (uLink.NetworkView)Object.Instantiate(Prefab);
     *              instance.transform.parent = Parent;
     *              instance.transform.position = position;
     *              instance.transform.rotation = rotation;
     *
     *  //Debug.Log("PreInstantiator " + instance.name);
     *
     *              return instance;
     *      }
     * }
     *
     * private void PostInstantiator(uLink.NetworkView instance, uLink.NetworkMessageInfo info)
     * {
     *      instance.BroadcastMessage("uLink_OnNetworkInstantiate", info, SendMessageOptions.DontRequireReceiver);
     *
     *      if(Activate != null)
     *              Activate(instance.gameObject);
     *
     * Active.Add(instance);
     * }
     */

    uLink.NetworkView Creator(string prefabName, uLink.NetworkInstantiateArgs args, uLink.NetworkMessageInfo info)
    {
        uLink.NetworkView instance = null;

        if (Pool.Count > 0)
        {
            instance = Pool.Pop();
            args.SetupNetworkView(instance);

            //Debug.Log("Creator " + instance.name);
        }
        else
        {
            instance = uLink.NetworkInstantiatorUtility.Instantiate(Prefab, args);

            //Debug.Log("Creator " + instance.name);
        }

        uLink.NetworkInstantiatorUtility.BroadcastOnNetworkInstantiate(instance, info);

        if (Activate != null)
        {
            Activate(instance.gameObject);
        }

        Active.Add(instance);

        return(instance);
    }
Ejemplo n.º 5
0
        /// <summary>
        /// This is the default method which is called for instantiation.
        /// </summary>
        /// <param name="prefab"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public static NetworkView Instantiate(NetworkView prefab, NetworkInstantiateArgs args)
        {
            AutoSetupNetworkViewOnAwake(args);
            var networkView = Object.Instantiate(prefab, args.position, args.rotation) as NetworkView;

            ClearAutoSetupNetworkViewOnAwake();

            return(networkView);
        }
Ejemplo n.º 6
0
    private uLink.NetworkView Creator(string prefabName, uLink.NetworkInstantiateArgs args, uLink.NetworkMessageInfo info)
    {
        uLink.NetworkView instance;

        if (pool.Count > 0)
        {
            instance = pool.Pop();

            args.SetupNetworkView(instance);

            SetActive(instance, true);             // will trigger callback message "OnEnable" (networkView.viewID != unassigned).
        }
        else
        {
            instance = uLink.NetworkInstantiatorUtility.Instantiate(prefab, args);             // will trigger callback message "Awake" and "OnEnable" (networkView.viewID != unassigned).
        }

        uLink.NetworkInstantiatorUtility.BroadcastOnNetworkInstantiate(instance, info);         // will trigger callback message "OnNetworkInstantiate".

        return(instance);
    }
Ejemplo n.º 7
0
    private uLink.NetworkView Creator(string prefabName, uLink.NetworkInstantiateArgs args, uLink.NetworkMessageInfo info)
    {
        uLink.NetworkView instance;

        if (pool.Count > 0)
        {
            instance = pool.Pop();

            args.SetupNetworkView(instance);

            SetActive(instance, true);
        }
        else
        {
            instance = uLink.NetworkInstantiatorUtility.Instantiate(prefab, args);
        }

        uLink.NetworkInstantiatorUtility.BroadcastOnNetworkInstantiate(instance, info);

        return(instance);
    }
 protected abstract NetworkViewBase OnCreate(string prefabName, NetworkInstantiateArgs args, NetworkMessageInfo info);
Ejemplo n.º 9
0
 public static void AutoSetupNetworkViewOnAwake(NetworkInstantiateArgs args)
 {
     _autoSetupOnAwake     = true;
     _autoSetupOnAwakeArgs = args;
 }