/// <summary> /// This is an advanced spawning function that registers a custom assetId with the UNET spawning system. /// <para>This can be used to register custom spawning methods for an assetId - instead of the usual method of registering spawning methods for a prefab. This should be used when no prefab exists for the spawned objects - such as when they are constructed dynamically at runtime from configuration data.</para> /// </summary> /// <param name="assetId">Custom assetId string.</param> /// <param name="spawnHandler">A method to use as a custom spawnhandler on clients.</param> /// <param name="unspawnHandler">A method to use as a custom un-spawnhandler on clients.</param> public static void RegisterSpawnHandler(Guid assetId, SpawnDelegate spawnHandler, UnSpawnDelegate unspawnHandler) { if (spawnHandler == null || unspawnHandler == null) { Debug.LogError("RegisterSpawnHandler custom spawn function null for " + assetId); return; } if (LogFilter.Debug) { Debug.Log("RegisterSpawnHandler asset '" + assetId + "' " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); } spawnHandlers[assetId] = spawnHandler; unspawnHandlers[assetId] = unspawnHandler; }
static internal void RegisterSpawnHandler(NetworkHash128 assetId, SpawnDelegate spawnHandler, UnSpawnDelegate unspawnHandler) { if (spawnHandler == null || unspawnHandler == null) { if (LogFilter.logError) { Debug.LogError("RegisterSpawnHandler custom spawn function null for " + assetId); } return; } if (LogFilter.logDebug) { Debug.Log("RegisterSpawnHandler asset '" + assetId + "' " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); } s_SpawnHandlers[assetId] = spawnHandler; s_UnspawnHandlers[assetId] = unspawnHandler; }
/// <summary> /// Registers a prefab with the spawning system. /// <para>When a NetworkIdentity object is spawned on a server with NetworkServer.SpawnObject(), and the prefab that the object was created from was registered with RegisterPrefab(), the client will use that prefab to instantiate a corresponding client object with the same netId.</para> /// <para>The NetworkManager has a list of spawnable prefabs, it uses this function to register those prefabs with the ClientScene.</para> /// <para>The set of current spawnable object is available in the ClientScene static member variable ClientScene.prefabs, which is a dictionary of NetworkAssetIds and prefab references.</para> /// </summary> /// <param name="prefab">A Prefab that will be spawned.</param> /// <param name="spawnHandler">A method to use as a custom spawnhandler on clients.</param> /// <param name="unspawnHandler">A method to use as a custom un-spawnhandler on clients.</param> public static void RegisterPrefab(GameObject prefab, SpawnDelegate spawnHandler, UnSpawnDelegate unspawnHandler) { NetworkIdentity identity = prefab.GetComponent <NetworkIdentity>(); if (identity == null) { Debug.LogError("Could not register '" + prefab.name + "' since it contains no NetworkIdentity component"); return; } if (spawnHandler == null || unspawnHandler == null) { Debug.LogError("RegisterPrefab custom spawn function null for " + identity.assetId); return; } if (identity.assetId == Guid.Empty) { Debug.LogError("RegisterPrefab game object " + prefab.name + " has no prefab. Use RegisterSpawnHandler() instead?"); return; } if (LogFilter.Debug) { Debug.Log("Registering custom prefab '" + prefab.name + "' as asset:" + identity.assetId + " " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); } spawnHandlers[identity.assetId] = spawnHandler; unspawnHandlers[identity.assetId] = unspawnHandler; }