TapTapTap!!!(9)~レベルアップ機能を作る~ではレベルアップ機能(難易度アップ機能)を作成した。今回はゲームオーバー時点のレベルを保存する機能を作成し、スタート画面上に最高レベルの表示とプレイ画面上で現在レベルの表示を追加する。
1.画面上に現在レベルの表示
「taptaptap」のシーン上にレベル表示用のテキストを作成する。テキストの作成方法についてはTapTapTap!!!(5)~ボタン出現時に文字を表示する~で行っているため省略する。このときのテキスト名は 「Level」として、テキストの中身は空にしておこう。
次にレベルを表示するスクリプトを作成する。ButtonManager.cs にレベル表示用の変数を追加し、
[cce_csharp] /// <summary> /// レベル表示用テキストオブジェクト /// </summary> public Text levelText; /// <summary> /// レベル表示用テキスト /// </summary> private string constLevelText = "Level:"; /// <summary> /// スタート時のレベル /// </summary> private int level = 1;[/cce_csharp]
ゲーム開始時にレベル1としてゲームが開始されるよう調整する。
[cce_csharp] /// <summary> /// ゲーム開始時の処理。画面サイズの取得を行う。 /// </summary> void Start() { screenWidth = (Screen.width - 100) - (Screen.width - 100) / 2; screenHeight = (Screen.height - 100) - (Screen.height - 100) / 2; levelText.text = constLevelText + level.ToString(); }[/cce_csharp]
その後、レベルアップに合わせて、レベルを1ずつ増やし、レベルのテキストを更新する処理を加える。
[cce_csharp] 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().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; level++; levelText.text = constLevelText + level.ToString(); levelUpCount = 0; } }[/cce_csharp]
この処理を加えることで画面上に現在のレベが表示されるようになるだろう。
2.プレイ画面に現在のレベルを表示する
ButtonManager.cs を修正し、ゲームオーバーになったときにその時点のレベルと過去最高のレベルを比較しレベルの高い方を選択して保存する。
[cce_csharp] /// <summary> /// 逐次更新された際の処理。時間の管理やボタンの生成、ゲームオーバーの判定を逐次行う。 /// </summary> void Update() { timeOut += Time.deltaTime; // timeOut が buttonAppearanceTime を超えたらボタンを出現させる if (!gameOver && buttonAppearanceTime < timeOut && levelUpCount != levelUp) { StartCoroutine("execute"); timeOut = 0; levelUpCount++; } // ポイントが 0 以下になったらゲームオーバー if (!gameOver && FindObjectOfType<Score>().getPoint() <= 0 && levelUpCount != levelUp) { GameObject prefab = (GameObject)Instantiate(gameOverText); prefab.transform.SetParent(canvas.transform, false); if (PlayerPrefs.HasKey("PlayerData")) { int bestLevel = PlayerPrefs.GetInt("PlayerData"); if (bestLevel < level) { PlayerPrefs.SetInt("PlayerData", level); } } else { PlayerPrefs.SetInt("PlayerData", level); } gameOver = true; } }[/cce_csharp]
3.スタート画面に最高レベルを表示する
「Start」のシーン上にレベル表示用のテキストを作成する。テキストの作成方法についてはTapTapTap!!!(5)~ボタン出現時に文字を表示する~で行っているため省略する。このときのテキスト名は 「MaxLevel」として、テキストの中身は空にしておこう。そして、最高レベル表示用のスクリプトを作成する今回は新たなスクリプトファイルを作成する作制方法についてはTapTapTap!!!(2)~ボタンを出現・消滅させる~で行っているため省略するこのときのスクリプトファイル名は MaxLevel .cs とする
MaxLevel.cs に以下のスクリプトを記載する。内容としては過去のプレイでレベルが保存されていたらそのレベルを表示し、レベルがなければ “-” としている。
[cce_csharp]using UnityEngine; using UnityEngine.UI; public class MaxLevel : MonoBehaviour { /// <summary> /// 最高レベル表示用テキスト /// </summary> public Text maxLevel; /// <summary> /// 最高レベル用テキスト /// </summary> private string maxText = "最高レベル:"; /// <summary> /// 開始処理 /// </summary> void Start() { if (PlayerPrefs.HasKey("PlayerData")) { int level = PlayerPrefs.GetInt("PlayerData"); maxLevel.text = maxText + level.ToString(); } else { maxLevel.text = maxText + "-"; } } }[/cce_csharp]