今回の内容
前回の続きで、ゲームクリア時の画面を作成していきます。
以下の3点を対応していきます。
・クリア時に UI を表示する
・ステージのコインの総数と獲得数を表示する
・Nextボタンをクリックしたときの処理
※初めての方はこちらから
⇒ 【第1回記事】導入とサンプルの紹介
クリア時に UI を表示する
まず、どのスクリプトに処理を書くかですが、今回は GameManagerScript に書いていきます。
これは、コインの枚数を GameManagerScript で管理しているので、そこにまとめた方が見通しが良さそうという判断です。
では実装ですが、GameManagerScript を以下の通り編集します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManagerScript : MonoBehaviour
{
public enum GAME_STATUS { Play, Clear, Pause, GameOver };
public static GAME_STATUS status;
public static int tempCoinNum;
[SerializeField]
Text coinNumText;
[SerializeField]
GameObject clearUI;
void Start()
{
// ステータスをPlayに
status = GAME_STATUS.Play;
}
void Update()
{
if (status == GAME_STATUS.Clear)
{
clearUI.SetActive(true);
}
coinNumText.text = tempCoinNum.ToString();
}
}
clearUI が、クリア時のUI(ClearUI)を参照するための変数です。
status が Clear となったときに、表示するように実装しています。
なお、status が Clear になる処理、タイミングを忘れてしまった方は、
GoalScript と PlayerScript を確認してください。
スクリプトを保存したら Unityエディタに戻って、
GameManagerScript の clearUI に Canvas > ClearUI を設定します。

ゲームをプレイして、クリア時に UI が表示されるようになっていれば成功です。
ステージのコインの総数と獲得数を表示する
ステージに配置されているコインの総数を取得するための準備をします。
新規タグ「Coin」を追加して、Coinプレハブに設定します。

次に GameManagerScript を編集します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManagerScript : MonoBehaviour
{
public enum GAME_STATUS { Play, Clear, Pause, GameOver };
public static GAME_STATUS status;
public static int tempCoinNum;
[SerializeField]
Text coinNumText, resultCoinText;
[SerializeField]
GameObject clearUI;
int stageCoinNum;
void Start()
{
// ステージ内のコインの枚数を取得
stageCoinNum = GameObject.FindGameObjectsWithTag("Coin").Length;
// ステータスをPlayに
status = GAME_STATUS.Play;
}
void Update()
{
if (status == GAME_STATUS.Clear)
{
resultCoinText.text = tempCoinNum.ToString().PadLeft(3) + "/" + stageCoinNum;
clearUI.SetActive(true);
}
coinNumText.text = tempCoinNum.ToString();
}
}
14行目は、元々あった行に「resultCoinText」だけ追加しています。
これは、コインの総数を表示する Text を参照するための変数です。
24行目では先ほど追加した Coinタグを使って、ステージ内のコインの総数を取得しています。
34行目でUIのテキストに、獲得したコイン(tempCoinNum)と、総コイン数(stageCoinNum)を表示しています。
なお、PadLeft を使って空白埋めしているのは、表示位置の調整が目的です。
これでスクリプトは完成なので、保存したら Unityエディタに戻ります。
GameManagerScript の resultCoinText に、Canvas > ClearUI > ResultCoinText を設定します。

クリア時の UI にコインの総数と獲得数が表示されれば成功です。

Nextボタンクリック時の処理
最後に、Nextボタンクリック時の処理を作成します。
なお、本来は次のステージを読み込む仕組みとしますが、
今回は簡単のために、「Stage1」を再読み込みする実装とします。
本格的な実装は後の記事で行います。
GameManagerScript に 以下の通り「LoadNextScene」メソッドを追加します。
using句を忘れずに追加してください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameManagerScript : MonoBehaviour
{
~ 省略 ~
public void LoadNextScene()
{
SceneManager.LoadScene("Stage1");
}
}
(関連記事)
シーンの切り替え
スクリプトを保存したら Unityエディタに戻って、NextButton の OnClick に、
作成した LoadNextSceneメソッドを設定します。

Nextボタンクリック時に Stage1 が再読み込みされていれば成功です。
おわりに
一旦ここまでで、クリア画面の表示と機能がおよそ完成となります。
次回は今回の内容にやや関連する機能である、コイン枚数の保存機能を作成していきます。
関連リンク ➡ 「初心者のための」Unityゲーム制作 目次
© Unity Technologies Japan/UCL