/// <summary> /// 1D 隨機產生。 /// </summary> /// <param name="holeArray">1D陣列產生方式</param> /// <param name="spawnTime">產生間隔時間</param> public IEnumerator SpawnByRandom(string miceName, sbyte[] holeArray, float spawnTime, float intervalTime, float lerpTime, int spawnCount, bool isSkill) { // < = > test OK int _tmpCount = 0; int[] _rndPos = new int[spawnCount]; List <sbyte> _holeList = new List <sbyte>(holeArray); for (int i = 0; i < spawnCount; i++) { int rndNum = UnityEngine.Random.Range(0, _holeList.Count); _rndPos[i] = _holeList[rndNum]; _holeList.RemoveAt(rndNum); } for (int item = 0; item < spawnCount; item++) { if (item / _rndPos.Length == 1) // =13 = 歸零 { spawnCount -= item; item = 0; } yield return(new WaitForSeconds(spawnTime)); if (hole[_rndPos[item] - 1].GetComponent <HoleState>().holeState == HoleState.State.Open) { GameObject clone = poolManager.ActiveObject(miceName); if (clone != null) { clone.transform.gameObject.SetActive(false); hole[_rndPos[item] - 1].GetComponent <HoleState>().holeState = HoleState.State.Closed; _miceSize = hole[_rndPos[item] - 1].transform.GetChild(0).localScale / 10 * miceSize; // Scale 版本 clone.transform.parent = hole[_rndPos[item] - 1].transform; // hole[-1]是因為起始值是0 clone.transform.localPosition = Vector2.zero; clone.transform.localScale = hole[_rndPos[item] - 1].transform.GetChild(0).localScale - _miceSize; // 公式 原始大小分為10等份 10等份在減掉 要縮小的等份*乘洞的倍率(1.4~0.9) => 1.0整份-0.2份*1(洞口倍率)=0.8份 clone.transform.gameObject.SetActive(true); clone.transform.GetChild(0).SendMessage("Play"); spawnTime = Mathf.Lerp(spawnTime, 0f, lerpTime); _tmpCount++; if (_tmpCount - spawnCount == 0) { yield return(new WaitForSeconds(intervalTime)); goto Finish; } } else { Debug.Log("Object Pool hasn't Object"); } } else { Debug.Log("Closed!"); } } Finish :; if (!isSkill) { Global.spawnFlag = true; } }