Unity Object Pool
Posted Litmin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity Object Pool相关的知识,希望对你有一定的参考价值。
using System.Collections; using System.Collections.Generic; using UnityEngine; [System.Serializable] public class ObjectPoolItem { public GameObject objectToPool; public int amountToPool; public bool shouldExpand = true; } public class ObjectPooler : MonoBehaviour { public static ObjectPooler SharedInstance; public List<GameObject> pooledObjects; public List<ObjectPoolItem> itemToPool; void Awake() { SharedInstance = this; } private void Start() { pooledObjects = new List<GameObject>(); foreach(ObjectPoolItem item in itemToPool) { for (int i = 0; i < item.amountToPool; i++) { GameObject obj = (GameObject)Instantiate(item.objectToPool); obj.SetActive(false); pooledObjects.Add(obj); } } } public GameObject GetPooledObject(string tag) { for (int i = 0; i < pooledObjects.Count; i++) { if (!pooledObjects[i].activeInHierarchy && pooledObjects[i].tag == tag) { return pooledObjects[i]; } } foreach (ObjectPoolItem item in itemToPool) { if (item.objectToPool.tag == tag) { if (item.shouldExpand) { GameObject obj = (GameObject)Instantiate(item.objectToPool); obj.SetActive(false); pooledObjects.Add(obj); return obj; } } } return null; } }
以上是关于Unity Object Pool的主要内容,如果未能解决你的问题,请参考以下文章