对象池GameObjectPool

针对项目中子弹过多导致的对象池插件效率问题,作者自行编写了一个C#对象池实现。PoolManager脚本挂载在物体上,简化使用流程。可以调用InitPrefab初始化预设体,也可直接使用。
摘要由CSDN通过智能技术生成

上个飞机的项目,子弹太多的情况下,对象池插件效率比较低,今天没事就自己写了一个,感觉效率还行。

使用方法简单,只需要在某个物体上挂在PoolManager脚本即可,就可以直接使用了,想再其他脚本中调用InitPrefab(GameObject prefab)提前生成池也可以,不调用也可以使用

2016-11-2修改

using UnityEngine;
using System.Collections.Generic;

namespace Patent
{
    public class PoolManager : MonoBehaviour
    {
        private Transform myTransform;
        private static PoolManager instance;

        private static List<GameObject> prefabList =new List<GameObject>();
        //存放预制体对应的id,ObjcetPool
        public static Dictionary<int ,ObjectPool> poolManagerDic =new Dictionary<int, ObjectPool>();
        private static  Dictionary<Transform,ObjectPool> transformDic=new Dictionary<Transform, ObjectPool>(); 

        //初始化某个预制体对应的对象池
        public static void InitPrefab(GameObject prefab,int initNum=10)
        {
            GetObjectPool(prefab,initNum);
        }
        //外界调用的接口
        public static Transform PullObjcetFromPool(GameObject prefab)
        {
            return _PullObjcetFromPool(prefab);
        }
        public static Transform PullObjcetFromPool(GameObject prefab, Vector3 pos, Quaternion quaternion)
        {
            return _PullObjcetFromPool(prefab,pos,quaternion);
        }
        private static Transform _PullObjcetFromPool(GameObject prefab)
        {
            if (prefab==null)
            {
                Debug.Log("prefab is null!");
                return null;
            }
            ObjectPool objPool = GetObjectPool(prefab);
           return objPool.PullObjcetFromPool();
        }

        private static Transform _PullObjcetFromPool(GameObject prefab, Vector3 pos, Quaternion quaternion)
        {
            if (prefab == null)
            {
                Debug.Log("prefab is null!");
                return null;
            }
            ObjectPool objPool = GetObjectPool(prefab,pos,quaternion);
            return objPool.PullObjcetFromPool(pos,quaternion);
        }

        private static ObjectPool GetObjectPool(GameObject prefab,int initNum=10)
        {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值