public Spawner(NetworkManager networkManager) { this.networkManager = networkManager; for (var i = 0; i < networkManager.NetworkConfig.NetworkPrefabs.Count; i++) { var networkPrefab = networkManager.NetworkConfig.NetworkPrefabs[i]; if (!this.prefab && networkPrefab.Prefab.TryGetComponent(out T prefab)) { this.prefabHash = NetworkSpawnManager.GetPrefabHashFromIndex(i); this.prefab = prefab; break; } } NetworkSpawnManager.RegisterSpawnHandler(this.prefabHash, this.OnPrefabSpawned); }
/// <summary> /// Builds up the cache for a prefab. /// </summary> private void RegisterPrefabInternal(GameObject prefab, int prewarmCount) { var networkObject = prefab.GetComponent <NetworkObject>(); var prefabHash = networkObject.PrefabHash; prefabs[prefabHash] = prefab; var prefabQueue = new Queue <NetworkObject>(); pooledObjects[prefabHash] = prefabQueue; for (int i = 0; i < prewarmCount; i++) { var go = CreateInstance(prefabHash); ReturnNetworkObject(go.GetComponent <NetworkObject>()); } // Register MLAPI Spawn handlers NetworkSpawnManager.RegisterDestroyHandler(prefabHash, ReturnNetworkObject); NetworkSpawnManager.RegisterSpawnHandler(prefabHash, (position, rotation) => GetNetworkObjectInternal(prefabHash, position, rotation)); }