Ejemplo n.º 1
0
        public static Transform Spawn(Transform prefab, Vector3 pos, Quaternion rot, Vector3 localScale, Pool.UpdateDelegate update = null, Pool.DespawnTestDelegate despawn = null)
        {
            if (sInstance == null)
            {
                Debug.LogError("Hydra.PoolManager: No PoolManager instance.  Add a PoolManager object to the scene.");
                return(null);
            }
#if UNITY_EDITOR
            if (sInstance.editorDynamicResize && !sInstance.mRuntimePools.ContainsKey(prefab))
            {
                // make a new pool
                Pool newPool = ScriptableObject.CreateInstance <Pool>();
                newPool.name              = "Pool_" + prefab.name;
                newPool.prefab            = UnityEditor.PrefabUtility.FindPrefabRoot(prefab.gameObject).transform;
                newPool.size              = 1;
                newPool.onDespawn         = Pool.DespawnAction.Deactivate;
                newPool.onCapacityReached = Pool.CapacityReachedAction.Recycle;
                sInstance.pools.pools.Add(newPool);
                UnityEditor.AssetDatabase.AddObjectToAsset(newPool, sInstance.pools);
                UnityEditor.AssetDatabase.ImportAsset(UnityEditor.AssetDatabase.GetAssetPath(sInstance.pools));
                RuntimePool runtimePool = new RuntimePool();
                runtimePool.InitializePool(newPool);
                sInstance.mRuntimePools[newPool.prefab] = runtimePool;
            }
#endif
            Transform t = sInstance.mRuntimePools[prefab].ActivateObject(pos, rot, localScale);
            if (t != null)
            {
                sInstance.mSpawnedObjects[t] = sInstance.mRuntimePools[prefab];
                if (update != null)
                {
                    SpawnedUpdate spawnedUpdate = new SpawnedUpdate();
                    spawnedUpdate.del = update;
                    spawnedUpdate.t   = t;
                    sInstance.mUpdates.Add(spawnedUpdate);
                }
                if (despawn != null)
                {
                    DespawnCheck check = new DespawnCheck();
                    check.del = despawn;
                    check.t   = t;
                    sInstance.mDespawnChecks.Add(check);
                }
            }

            return(t);
        }
Ejemplo n.º 2
0
 public static Transform Spawn(Transform prefab, Transform at, Pool.UpdateDelegate update = null, Pool.DespawnTestDelegate despawn = null)
 {
     return(Spawn(prefab, at.position, at.rotation, at.localScale, update, despawn));
 }
Ejemplo n.º 3
0
 void TrackSpawnedObject(Transform t, Transform prefab, Pool.UpdateDelegate update, Pool.DespawnTestDelegate despawn)
 {
     if (mSpawnedObjects.ContainsKey(t))
     {
         UntrackSpawnedObject(t);
     }
     else
     {
         mSpawnedObjects[t] = mRuntimePools[prefab];
     }
     if (update != null)
     {
         SpawnedUpdate spawnedUpdate = new SpawnedUpdate();
         spawnedUpdate.del = update;
         spawnedUpdate.t   = t;
         mUpdates.Add(spawnedUpdate);
     }
     if (despawn != null)
     {
         DespawnCheck check = new DespawnCheck();
         check.del = despawn;
         check.t   = t;
         mDespawnChecks.Add(check);
     }
 }