Unityでぷよぷよを作ってみた 8
スポンサードリンク
猶予を持たせる
ぷよがくっついてから消えるまでの間と消えた後落下するまでの間のそれぞれに猶予を持たせる。
public event EventHandler<EventArgs> Falled; private static List<Puyo> droppablePuyoes = new List<Puyo>(); private enum State { Normal, FreeFall, Vanish, Wait } private int chainCount; private void Update() { switch (state) { case State.Normal: //落下、移動、回転、固定などの処理 break; case State.FreeFall: //自由落下処理 break; case State.Vanish: //消去可能ぷよを取得 var vanishable = field.GetVanishablePuyoes(); if (vanishable.Count > 0) { //0.1秒後に消去を実行 StartCoroutine(CoroutineWait(0.1f, () => { chainCount++; //ぷよを消去 vanishable.ForEach(p => p.Vanish()); //落下可能ぷよを取得 droppablePuyoes = field.GetDroppablePuyoes(); //0.5秒後に自由落下または、次の組ぷよの作成を実行 StartCoroutine(CoroutineWait(0.5f, () => { if (droppablePuyoes.Count > 0) state = State.FreeFall; else { //通常へ遷移 TransitionToNormal(); } })); })); } else { //通常へ遷移 TransitionToNormal(); } break; case State.Wait: //待機処理 break; } } //指定した秒数待機し、指定した処理を実行 private IEnumerator CoroutineWait(float seconds, Action callback) { state = State.Wait; yield return new WaitForSeconds(seconds); callback(); } private void TransitionToNormal() { chainCount = 0; state = State.Normal; //この組ぷよ自身の消去と新しい組ぷよの作成 OnFalled(); } //落下終了後のイベント。組ぷよ作成時に設定 protected virtual void OnFalled() { Falled?.Invoke(this, EventArgs.Empty); }