记录一下子:对象池连续添加删除,不重复 (地鼠随机出现,不重复出现在一个洞类)

//首先://定义一个地鼠集合  (对象池)
       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
今日推荐