TapTapTap!!!(9)~レベルアップ機能を作る~
TapTapTap!!!(8)~スタート画面を追加する~ではいきなりゲームが開始されるのでは味気がないためゲーム開始ボタンを追加した。今回はレベルアップ機能(難易度アップ機能)を作る
レベルアップの方法としてはいろいろと考えられる。私が簡単に考えて挙げられるものは以下の方法がある。
・ボタンの出現数を増やす
・ボタンの消滅速度を早める
・ボタンの出現速度を早める
・ボタンの大きさを小さくする
・ボタンに動きをつける。
今回のレベルアップでは「ボタンの消滅速度を早める」と「ボタンの出現速度を早める」を交互に繰り返す方法を選択したいと思う。
1.8 回ボタンを出現させた後、「レベルアップ」の文字を表示する。
8 回ボタンを出現させた後、「レベルアップ」の文字を表示するためにテキストを作成する。テキストの作成方法についてはTapTapTap!!!(5)~ボタン出現時に文字を表示する~で行っているため参照してほしい。作成したテキストの名称は「LevelUp」とし、Prefabに登録しておく。
その後、「ButtonManager」にボタンの表示回数をカウントする変数および、設定値(今回は 8 回)に達したときに「レベルアップ」と表示するスクリプトを追加する。
今回編集するスクリプトは ButtonManager.cs を編集する。レベルアップまでの出現回数の変数、レベルアップ用テキストのゲームオブジェクト、内部用の出現回数カウント変数を追加と
[cce_csharp] /// <summary> /// レベルアップまでの回数 /// </summary> public int levelUp; /// <summary> /// レベルアップ用テキスト /// </summary> public GameObject levelUpText; /// <summary> /// レベルアップまでの回数 /// </summary> private int levelUpCount;[/cce_csharp]
execute コルーチンに対して、レベルアップの判定および処理を追加する。
[cce_csharp] /// <summary> /// 本ゲームのメイン実行処理。ボタンの生成や点数の加減計算を行う。 /// </summary> /// <returns>IEnumerator オブジェクト</returns> private IEnumerator execute() { GameObject prefab = createButton(); yield return new WaitForSeconds(buttonExtinctionTime); int count; // ボタンタップによってボタンオブジェクtが削除されているときは加点、 // 削除されていなかったときは減点する if (prefab != null) { GameObject.Destroy(prefab); failure--; count = failure; succession = 0; } else { succession++; count = succession; failure = 0; } FindObjectOfType<Score>().addPoint(10 * count); if (levelUpCount == levelUp) { GameObject levelUpObject = (GameObject)Instantiate(levelUpText); levelUpObject.transform.SetParent(canvas.transform, false); yield return new WaitForSeconds(1); GameObject.Destroy(levelUpObject); levelUpCount = 0; } }[/cce_csharp]
2.8 回ボタンを表示した後、ボタンの消滅速度を早める
ボタンの消滅時間を早める方法は execute コルーチンの中でボタンの消滅時間を更新する用に修正を行う。今回はボタン消滅時間を規定の時間数から 3/4 ずつ短くなるよう修正する。修正内容については内容は以下の通り。
[cce_csharp] /// <summary> /// 本ゲームのメイン実行処理。ボタンの生成や点数の加減計算を行う。 /// </summary> /// <returns>IEnumerator オブジェクト</returns> private IEnumerator execute() { GameObject prefab = createButton(); yield return new WaitForSeconds(buttonExtinctionTime); int count; // ボタンタップによってボタンオブジェクtが削除されているときは加点、 // 削除されていなかったときは減点する if (prefab != null) { GameObject.Destroy(prefab); failure--; count = failure; succession = 0; } else { succession++; count = succession; failure = 0; } FindObjectOfType<Score>().addPoint(10 * count); if (levelUpCount == levelUp) { GameObject levelUpObject = (GameObject)Instantiate(levelUpText); levelUpObject.transform.SetParent(canvas.transform, false); yield return new WaitForSeconds(1); GameObject.Destroy(levelUpObject); buttonExtinctionTime/= 4; buttonExtinctionTime*= 3; levelUpCount = 0; } }[/cce_csharp]
3.8 回ボタンを表示した後、ボタンの出現速度を早める
ボタンの出現速度を早める方法は execute コルーチンの中でボタンの出現時間を更新する用に修正を行う。今回はボタン出現時間を規定の時間数から 3/4 ずつ短くなるよう修正する。修正内容については内容は以下の通り。この当りは自分で調節してみても面白いだろう。
[cce_csharp] /// <summary> /// 本ゲームのメイン実行処理。ボタンの生成や点数の加減計算を行う。 /// </summary> /// <returns>IEnumerator オブジェクト</returns> private IEnumerator execute() { GameObject prefab = createButton(); yield return new WaitForSeconds(buttonExtinctionTime); int count; // ボタンタップによってボタンオブジェクtが削除されているときは加点、 // 削除されていなかったときは減点する if (prefab != null) { GameObject.Destroy(prefab); failure--; count = failure; succession = 0; } else { succession++; count = succession; failure = 0; } FindObjectOfType<Score>().addPoint(10 * count); if (levelUpCount == levelUp) { GameObject levelUpObject = (GameObject)Instantiate(levelUpText); levelUpObject.transform.SetParent(canvas.transform, false); yield return new WaitForSeconds(1); GameObject.Destroy(levelUpObject); buttonExtinctionTime/= 4; buttonExtinctionTime*= 3; buttonAppearanceTime /= 4; buttonAppearanceTime *= 3; levelUpCount = 0; } }[/cce_csharp]
あとは、現在表示しているポイントと同様に現在のレベルを表示しても盛り上がるだろう。