public void SpawnButtonClicked() { Cleanup(); string key = Options.options[Options.value].text; System.Diagnostics.Stopwatch w = System.Diagnostics.Stopwatch.StartNew(); for (int i = 0; i < 1000; i++) { // get or create and object from cache GameObject obj = SpawningPool.CreateFromCache(key); if (obj == null) { Debug.LogErrorFormat("Unable to find object for key: {0}", key); return; } // random position and rotation Vector3 pos = Random.onUnitSphere; obj.transform.position = pos * UnityEngine.Random.Range(-5.0f, 5.0f); obj.transform.rotation = Random.rotation; } w.Stop(); UpdateResults(w.Elapsed.TotalMilliseconds); }
private void SceneWasLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode) { if (ReturnToCacheOnLevelLoad) { SpawningPool.RecycleActiveObjects(); } }
private void Awake() { if (awake) { return; } else if (instance == null) { awake = true; instance = this; DontDestroyOnLoad(this); if (Prefabs != null) { foreach (var prefab in Prefabs) { SpawningPool.AddPrefab(prefab.name, prefab); } } UnityEngine.SceneManagement.SceneManager.sceneLoaded += SceneWasLoaded; } else { Object.Destroy(gameObject); } }
private void Awake() { if (awake) { return; } else if (instance == null) { awake = true; instance = this; DontDestroyOnLoad(this); if (Prefabs != null) { foreach (var prefab in Prefabs) { SpawningPool.AddPrefab(prefab.Key, prefab.Prefab); } } UnityEngine.SceneManagement.SceneManager.sceneLoaded += (scene, mode) => { SpawningPool.RecycleActiveObjects(); }; } else { Object.Destroy(gameObject); } }
private void Cleanup() { SpawningPool.RecycleActiveObjects(); foreach (GameObject obj in regular) { GameObject.Destroy(obj); } regular.Clear(); // note- to send just one object back to the cache, call SpawningPool.ReturnToCache. This is an extension method for GameObject. }