public static TurretManager instance;
private Dictionary<string, List<GameObject>> pool;
void Awake()
{
instance = this;
}
void Start()
{
//string为预设体的name,list存入预设体生成的gameobject
pool = new Dictionary<string, List<GameObject>>();
}
//取对象 定义取对象,需要什么参数,对象声明的位置和角度
public GameObject GetObjectFromPool(string objName, Vector3 pos, Quaternion qua)
{
//声明一个gameobject
GameObject go;
//判断是否包含对应的list,并且list有值,不为空
if (pool.ContainsKey(objName) && pool[objName].Count > 0)
{
//取出对应的第0个元素,赋值给go
go = pool[objName][0];
//移除list中赋值给go的第0个元素
pool[objName].RemoveAt(0);
//激活该对象
go.SetActive(true);
}
//不是上面的情况都无法从池子中取出gameobject 只能克隆
else
{
//将克隆的对象作为预设体放在resources文件夹中
//resources.load加载出来的对象为object类型,需要里氏转换成gameobject类型
go = Instantiate(Resources.Load(objName) as GameObject);
}
//生成或取出的go赋值对象的坐标和角度
go.transform.position = pos;
go.transform.rotation = qua;
//最后返回go
return go;
}
//存对象
//需要一个gameobject类型的对象镀锡做参数,不需要返回值
public void PushobjectTopool(GameObject go)
{
//对象和预制体的名字不一致,采用字符串切割,将对象的名字切割成两部分,第0部分为预设体的名字。
string prefabName = go.name.Split('(')[0];
if (pool.ContainsKey(prefabName))
{
pool[prefabName].Add(go);
}
//如果没有对应的list
else
{
//新建list并把go添加进去
pool[prefabName] = new List<GameObject>() { go };
}
//存到池子中的物体隐藏
go.SetActive(false);
}
版权声明:本文为qq_42725795原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。