Пример #1
0
        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));
        }