作者KuLanDot (庫蘭達克斯)
看板GameDesign
標題[程式] Unity 2021 新物件池類別
時間Fri May 20 23:10:19 2022
在 Unity 2021 版中,新增了一系列的物件池類別
使用起來相當方便,而且概念也很棒
所以就做了一集來介紹這個物件池類別
https://www.youtube.com/watch?v=5Z7CG9seVfA
這個物件池類別 ObjectPool 就像 List 或 Stack 一樣
是一個資料類別,所以直接建立它的物件就可以使用
常用的建構子參數如下:
ObjectPool<
T>( <- T:對象類別
Func<
T> createFunc, <- 要建立新物件時的函式
Action<
T> actionOnGet, <- 要取出物件前,呼叫的函式
Action<
T> actionOnRelease, <- 要歸還物件前,呼叫的函式
Action<
T> actionOnDestroy) <- 物件池滿了,要呼叫的函式
舉例來說,如果要管理一個 Ball 類別的生成,就會像這樣:
var ballPool =
new ObjectPool<
Ball>(
CreateBall,
OnGetBall,
OnReleaseBall,
OnDestroyBall);
-
Ball CreateBall():就從 prefab 建立一個新的球
-
void OnGetBall(
Ball ball):啟動即將要取出的球物件
-
void OnReleaseBall(
Ball ball):關閉要歸還回來的球物件
-
void OnDestroy(
Ball ball):直接摧毀這個球物件
要從物件池取出物件就用 Get() 函式:
var ball = ballPool.
Get();
要歸還物件就用 Release() 函式:
ballPool.
Release(ball);
這個物件池類別也可以用來管理一般的類別,不一定要繼承 MonoBehaviour
另外它也可以使用在 using statement 之下:
using (somePool.
Get(
out data)) {
data =
GenerateData();
SendData(data);
}
在離開 using statement 之後,data 就會自己呼叫 Release 歸還回去了
我很喜歡 ObjectPool 類別用 callback 來增加泛用性的概念
在專案中很常用在圖鑑的地方,用來動態生成圖鑑列表的物件
推薦給大家
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.108.58 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1653059421.A.872.html
推 livelyO2: 推 05/21 00:00
推 newyellow: 感謝分享 第一次聽說這個類別 xd 05/23 05:32
推 iLeyaSin365: Money createmoney() 05/24 17:12