关于对象池的概念网上很多资料都已经介绍过来了,而且网上也有大神写的插件PoolManager。我比较少使用,因为平时做的项目偏小型,所以比较排斥把各种插件放到项目里(个人比较崇尚精简主义)。而我更喜欢学习其原理方法,根据自己的需求去重新实现功能(去繁取简)。
对象池原理
在游戏中我们都知道像怪物、子弹和特效等是需要频繁使用的(创建和销毁)。那么,毋庸置疑这一过程是会消耗性能的,所以引用对象池技术的意思就是在游戏开始前预先初始化一个含一定数量对象的池子,当游戏中需要时就从池子中取,不需要时就放回池中。这样就能避免游戏中频繁的创建和销毁对象。
下面代码将简单实现一个对象池
using UnityEngine;
using System.Collections;
public class MyObjectPool<T> {
// 方法的委托
public delegate T CreateDelegate();
private CreateDelegate dCreate;
private T[] objList; // 使用数组存储存取速度快,减少内存碎片
private int size = 0;
private int poolSize = 1;
/// <summary>
/// 对象池初始化对象,size为对象池初始大小
/// </summary>