/// <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));
        }