unity物件池技術
阿新 • • 發佈:2019-02-15
本文中程式碼來自brackeys視訊教程中內容的整理;
原視訊連結:
https://www.youtube.com/watch?v=tdSmKaJvCoA
程式碼如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PoolManager : SingletonBehaviour<PoolManager> { // 具體的池子 [System.Serializable] public class Pool { public string tag; public GameObject prefab; public int size; } public List<Pool> pools; // 池子管理 public Dictionary<string, Queue<GameObject>> poolDictionary; // 開始時填滿物件池,需要時可直接獲取 private void Start() { poolDictionary = new Dictionary<string, Queue<GameObject>>(); foreach (Pool pool in pools) { Queue<GameObject> objectQueue = new Queue<GameObject>(); for (int i = 0; i < pool.size; i++) { GameObject obj = Instantiate(pool.prefab); obj.SetActive(false); objectQueue.Enqueue(obj); } poolDictionary.Add(pool.tag, objectQueue); } } // 從物件池中生成 public GameObject SpawnFromPool(string tag, Vector3 position, Quaternion rotation) { if (!poolDictionary.ContainsKey(tag)) { Debug.LogWarning("Pool with tag " + tag + " doesn't exist! "); return null; } GameObject objectToSpawn = poolDictionary[tag].Dequeue(); objectToSpawn.SetActive(true); objectToSpawn.transform.position = position; objectToSpawn.transform.rotation = rotation; poolDictionary[tag].Enqueue(objectToSpawn); return objectToSpawn; } }
還見過另外一個不錯的物件池部落格,連結如下:
https://blog.csdn.net/qq_36927190/article/details/79475399