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