最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【Unity】官方對象池總算實裝了

2021-04-18 15:38 作者:YouSing  | 我要投稿

寫在前面

????最近在Unity2021,發(fā)現(xiàn)了新的命名空間UnityEngine.Pool,這套API最早出現(xiàn)的地方應(yīng)該是UGUI。后面大概是用到這套API的Package太多,干脆變成默認(rèn)的API,可喜可賀。

初階使用

????所有類如下圖所示

????使用很簡單,所有類API風(fēng)格分為兩種:

  • 手動Get,手動Release;

var list=ListPool<MyType>.Get();

// Do Something with list.

ListPool<MyType>.Release(list);

  • 使用Get(out)返回System.IDisposable,放在using中自動釋放;

using(ListPool<MyType>.Get(out var list)) {

????// Do Something with?list.

}

????這套API的設(shè)計初衷,是因為Unity功能包的有些操作需要頻繁使用臨時C#容器類,比如List<T>。如果不使用對象池系統(tǒng),當(dāng)然就是每幀都會造成GC負(fù)擔(dān)。所以最常用的傻瓜式靜態(tài)類都是System.Collections.Generic的池封裝。

高階使用

????核心實現(xiàn)類為ObjectPool<T>,而傻瓜式靜態(tài)容器類(如ListPool<T>)就是聲明一個ObjectPool<T>的靜態(tài)變量,利用泛型變量會根據(jù)T生成,內(nèi)存上不會相互干擾。不過我們直接使用ObjectPool<T>,自定義想要的池對象類型。

public?ObjectPool<T0>(Func<T>?createFunc, Action<T>?actionOnGet, Action<T>?actionOnRelease, Action<T>?actionOnDestroy, bool?collectionCheck, int?defaultCapacity, int?maxSize);

? ? 參數(shù)簡介如下:

  • createFunc:對象實例化實現(xiàn);

  • actionOnGet:出池回調(diào);

  • actionOnRelease:進池回調(diào);

  • actionOnDestroy:銷毀回調(diào);

  • collectionCheck:檢查集合,對象進池前,會先檢查是否在池中;

  • defaultCapacity:默認(rèn)容量;

  • maxSize:池大小的最大值,超出這數(shù)值,進池的對象直接銷毀;

后記

????其實有了這個API,可以少做很多那些,你為了回避Unity的GC,而做緩存變量等反人類操作。由于實現(xiàn)一個GameObject的對象池,算是爛大街的教程,我也不想多加闡述。畢竟用這個API,代碼可以省一大半了。

【Unity】官方對象池總算實裝了的評論 (共 條)

分享到微博請遵守國家法律
双柏县| 裕民县| 泗洪县| 铜山县| 南川市| 简阳市| 东兴市| 滨海县| 康乐县| 太仓市| 大理市| 香河县| 兴业县| 邻水| 平谷区| 中西区| 乐陵市| 阳西县| 钟山县| 东源县| 石首市| 南乐县| 兰州市| 襄垣县| 菏泽市| 竹北市| 察雅县| 深泽县| 怀仁县| 启东市| 库尔勒市| 博白县| 横山县| 三门峡市| 临夏市| 剑川县| 遵义市| 土默特右旗| 武陟县| 施甸县| 江川县|