Unity基于栈,Func和Action实现对象池方案
背景
在开发过程中,可能会反复操作某个对象,但是每次加载,实例出对象,有点耗时,此时引入对象池方案。
应用
游戏开始时,会预先实例出对象,用到的时候可以直接取,用完后压入栈中,等待下次使用。
核心代码
创建并压入栈中:
private PoolBase(Func<T> creatFunc, Action<T> onGet, Action<T> onPut, Action<T> onDestroy, int initSize = 32)
{
_initSize = initSize;
_creatFunc = creatFunc;
_onGet = onGet;
_onPut = onPut;
_onDestroy = onDestroy;
_objStack = new Stack<T>(initSize);
CreateNewItem(_initSize);
}
private void CreateNewItem(int size)
{
for (var i = 0; i < size; i++)
{
Put(_creatFunc());
}
}
获取栈中对象(没有的时候自动扩展):
public T Get()
{
if (_objStack.Count <= 0)
{
Expand();
}
var obj = _objStack.Pop();
if (_onGet != null)
_onGet(obj);
return obj;
}
需要可自取,Demo_009
链接:https://pan.baidu.com/s/1CP4FLttldNHW-gW2zUrlDA
提取码:ncv6