private static MyObjectPool _instance;//创建一个单例模式 public static MyObjectPool Instance { get { return _instance; } } void Start() { _instance = this; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 声明两个字典类型的集合: //用于存储需要实例化的对象,以及实例化后对象的集合 Dictionary<GameO...
ObjectPool<MyClass> poolOfMyClass =newObjectPool<MyClass>();voidUpdate() { MyClass m=poolOfMyClass.New();//do stuff...poolOfMyClass.Store(m); } 增加点复杂度 我是简洁主义的忠实信徒,但就目前而言ObjectPool类或许过于简单了。如果你搜索下用C#实现的对象池类库,你会发现其中很多是相当复杂的。...
在上面的例子中,poolofMyClass池对象需要显示申明在类级别作用域。显然,当我们需要一个其它类型的对象池时就需要重新申明一个。或许我们可以实现一个对用户透明。 创建管理所有类型池的ObjectPool。 一些对象池类库管理了太多种类的可怕的资源(如内存,数据库连接,游戏对象,外部资产等)。这无疑增加了对象池的代码复杂...
27. ObjectPoolManager.Instance.RemoveGameObject(PoolName, gameObject); 28. } 29. } ObjcetPoolManager 用来管理多个对象池 `1. public class ObjectPoolManager : Singleton<ObjectPoolManager> 2. { 3. private Dictionary<string, ObjectPool> m_PoolDic; 5. private Transform m_RootPoolTrans; 7. public...
ObjcetPool用来新建和回收游戏里的对象 public class ObjectPool { private Queue<GameObject> m_PoolQueue; private string m_PoolName; protected Transform m_Parent; // 需要缓存的对象 private GameObject prefab; // 最大容量 private int m_MaxCount; ...
ObjectPool是对象池基类,它是抽象类,包含了通用的成员和方法。作为一个基类,它提可被子类继承的方法是virtual的,便于实现多态。 CubePool, SpharePool是具体的对象池实现类,继承自ObjectPool,可以override基类的alloc和recycle等方法实现个性化的操作。 PrefabInfo挂在对象池中的每一个对象上,用来记录对象类型等信息。
ObjectPool是对象池基类,它是抽象类,包含了通用的成员和方法。作为一个基类,它提可被子类继承的方法是virtual的,便于实现多态。 CubePool, SpharePool是具体的对象池实现类,继承自ObjectPool,可以override基类的alloc和recycle等方法实现个性化的操作。 PrefabInfo挂在对象池中的每一个对象上,用来记录对象类型等信息。
// ObjectPool<T> 类定义了一个泛型对象池,实现了 IDisposable 和 IObjectPool<T> 接口。publicclassObjectPool<T>:IDisposable,IObjectPool<T>whereT:class{// 内部使用 List<T> 存储池中的对象。internalreadonlyList<T>m_List;// 用于创建新对象的委托。privatereadonlyFunc<T>m_CreateFunc;// 获取对象...
_object = GameObject.Instantiate(prefab);//满足条件则创建对象PushObject(_object);//并且返回对象池if(pool == null) pool = new GameObject("ObjectPool");//没有父类物体则创建,将该语句放这是为了节省资源,不用每次都对是否存在Pool进行判断//如果没有对应的子对象池则,则将其创建并设置为Pool的子对象...
for (int i = 0; i < pooledAmount; ++i) { GameObject obj = Instantiate(bulletObj); //创建子弹对象 obj.SetActive(false); //设置子弹无效 pooledObjects.Add(obj); //把子弹添加到链表(对象池)中 } } public GameObject GetPooledObject() //获取对象池中可以使用的子弹。