//首先://定义一个地鼠集合 (对象池)
public List<GameObject> DiglettPools = new List<GameObject>();
//定义一个地洞集合 (对象池)
[SerializeField] public List<Transform> BurrowsPools = new List<Transform>();
List<Transform> BurrowsPools02 = new List<Transform>();//中转站
/// <summary>
/// 从对象池中获取
/// </summary>
/// <param name="obj"></param>
public void GetObj(GameObject obj)
{
int posIdx = UnityEngine.Random.Range(0, GameManage.Instance.BurrowsPools.Count);
Vector3 vector = BurrowsPools[posIdx].position;
//判断池中是否有可用资源
if (DiglettPools.Count == 0) //没有则重新生成
{
GameObject go = Instantiate(obj, Vector3.zero, Quaternion.identity) as GameObject;
go.transform.SetParent(UILevels.High);
go.transform.position = vector;//位置赋值
BurrowsPools02.Add(BurrowsPools[posIdx]);
go.gameObject.name = BurrowsPools[posIdx].name;
BurrowsPools.RemoveAt(posIdx);//移除位置
}
else
{
//从对象池中取
GameObject go = DiglettPools[0];
go.transform.SetParent(UILevels.High);
go.SetActive(true);
go.transform.position = vector;//位置赋值
BurrowsPools02.Add(BurrowsPools[posIdx]);
go.gameObject.name = BurrowsPools[posIdx].name;
BurrowsPools.RemoveAt(posIdx);//移除位置
DiglettPools.Remove(go);
}
}
/// <summary>
/// 放到对象池中 (不需要的时候,放回去)
/// </summary>
/// <param name="obj"></param>
public void SetObj(GameObject obj)
{
Debug.Log("放到对象池中");
DiglettPools.Add(obj);
for (int i = 0; i < BurrowsPools02.Count; i++)
{
Debug.Log("-------for i="+i);
if (BurrowsPools02[i].position == obj.transform.position)
{
Debug.Log("foreach----添加位置----"+i);
BurrowsPools.Add(BurrowsPools02[i]);//添加位置
BurrowsPools02.Remove(BurrowsPools02[i]);
}
}
obj.SetActive(false);
}
记录一下子:对象池连续添加删除,不重复 (地鼠随机出现,不重复出现在一个洞类)
猜你喜欢
转载自blog.csdn.net/qq_37524903/article/details/123239090
今日推荐
周排行