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); }
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); }
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); }
/* * 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); }
/// <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); }
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); }
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);
public static void AutoSetupNetworkViewOnAwake(NetworkInstantiateArgs args) { _autoSetupOnAwake = true; _autoSetupOnAwakeArgs = args; }