using System.Collections; using System.Collections.Generic; using UnityEngine; namespace WildAttack { /// /// 气球池 /// public class BalloonPool : Singleton, IObjectPool { #region Members private List> balloonObjs; private Transform poolTrans; #endregion #region Override public void Init() { poolTrans = GameObject.Find("BalloonPool").transform; balloonObjs = new List>(); // index for (int i = 1; i <= 6; i++) { List balloons = new List(); // num for (int k = 0; k < 5; k++) { GameObject ball = GameObject.Instantiate(Resources.Load($"StageProperty/balloon_{i}"), poolTrans); ball.AddComponent(); ball.SetActive(false); balloons.Add(ball); } balloonObjs.Add(balloons); } } public GameObject GetGameObject() { List randomBalloons = balloonObjs[Random.Range(0, 6)]; for (int i = 0; i < randomBalloons.Count; i++) { if (!randomBalloons[i].activeInHierarchy) { return randomBalloons[i]; } } int rdmIndex = Random.Range(1, 7); GameObject ball = GameObject.Instantiate(Resources.Load($"StageProperty/balloon_{rdmIndex}"), poolTrans); ball.AddComponent(); balloonObjs[rdmIndex - 1].Add(ball); return ball; } public void RecycleAll() { for (int i = 0; i < poolTrans.childCount; i++) { if (poolTrans.GetChild(i).gameObject.activeSelf) { poolTrans.GetChild(i).transform.eulerAngles = Vector3.zero; poolTrans.GetChild(i).gameObject.SetActive(false); } } } #endregion #region Functions /// /// 只get红色 /// /// public GameObject GetRedBalloon() { List redBalloons = balloonObjs[2]; for (int i = 0; i < redBalloons.Count; i++) { if (!redBalloons[i].activeInHierarchy) { return redBalloons[i]; } } GameObject ball = GameObject.Instantiate(Resources.Load("StageProperty/balloon_3"), poolTrans); ball.AddComponent(); balloonObjs[2].Add(ball); return ball; } #endregion } }