using System.Collections; using System.Collections.Generic; using UnityEngine; namespace TFramework { public class ReferencePool { private Queue _referencePool; private int _capacity = 100; public ReferencePool(int capacity) { _capacity = capacity; _referencePool = new Queue(_capacity); } /// /// 引用数量 /// public int Count => _referencePool.Count; /// /// 生成引用 /// /// public T Spawn() where T : class, IReference, new() => Count > 0 ? _referencePool.Dequeue() as T : new T(); /// /// 回收引用 /// /// public void Recycle(T refe) where T : class, IReference, new() { if (Count >= _capacity) refe = null; else { refe.Reset(); _referencePool.Enqueue(refe); } } /// /// 清空所有引用 /// public void Clear() => _referencePool.Clear(); } }