更新日期:2019年9月26日。
Github源碼:[點我獲取源碼]
ReferencePool模塊簡介
ReferencePool是用於任意引用類型(除GameObject)的對象池,可以複用任意引用類型對象,以達到減少系統在頻繁創建和刪除對象時的開銷。
使用ReferencePool
生成對象
不同於ObjectPool對象池,ReferencePool引用池不需要註冊,任意引用類型只需要實現IReference接口,便可以直接通過引用池生成對象。
1.定義一個Test類並實現IReference接口:
public class Test : IReference
{
public int Value = 0;
public Test()
{
Value = 10;
}
/// <summary>
/// 當被引用池回收時重置數據
/// </summary>
public void Reset()
{
Value = 0;
}
}
2.生成對象:
//提取一個 Test 對象
Test t = Main.m_ReferencePool.Spawn<Test>();
回收對象
當對象不再使用時,回收對象也很簡單:
//提取一個 Test 對象
Test t = Main.m_ReferencePool.Spawn<Test>();
//回收對象
Main.m_ReferencePool.Despawn(t);
//批量回收對象
List<Test> ts;
Main.m_ReferencePool.Despawns(ts);
設置對象池上限
選中主預製體下的ReferencePool對象,在ReferencePoolManager的屬性面板,Limit爲限制引用池中單個引用隊列的上限,引用池中的對象超過此數值時將不再回收對象。
清理對象池
//清空 Test 對象池
Main.m_ReferencePool.Clear(typeof(Test));
//清空所有對象池
Main.m_ReferencePool.Clear();
運行時檢視面板
在編輯器中運行時將會出現運行時檢視面板(Runtime Data),主要用以調試或數據監測,目前面板如下:
1.展示所有對象池,顯示對象池的類名及當前保留的對象數量。