上个飞机的项目,子弹太多的情况下,对象池插件效率比较低,今天没事就自己写了一个,感觉效率还行。
使用方法简单,只需要在某个物体上挂在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)
{