public SpawnedObjectController SpawnAsController(GameObject prefab, Vector3 pos, Quaternion rot, Transform par = null, System.Action <GameObject> initializeProperties = null)
        {
            if (_spawnPoint == null)
            {
                throw new System.InvalidOperationException("SpawnerMechanism must be initialized before calling Spawn.");
            }
            if (!_active)
            {
                return(null);
            }
            if (prefab == null)
            {
                return(null);
            }

            using (var modifiers = TempCollection.GetList <ISpawnerModifier>())
            {
                SpawnPointHelper.GetSpawnModifiers(_spawnPoint, modifiers);

                if (SpawnPointHelper.SignalOnBeforeSpawnNotification(_spawnPoint, prefab, modifiers))
                {
                    return(null);
                }

                //perform actual spawn
                var controller = this.SpawnPool.SpawnAsController(prefab, pos, rot, par, initializeProperties, _spawnPoint);
                if (controller == null)
                {
                    return(null);
                }
                _spawnedObjects.Add(controller);
                _totalCount++;
                //end actual spawn

                SpawnPointHelper.SignalOnSpawnedNotification(_spawnPoint, this.SpawnPool, controller.gameObject, modifiers);

                return(controller);
            }
        }