Developer

【Unity実践】#17 クリア画面の作成②【ランゲーム】
2021.12.08
Lv2

【Unity実践】#17 クリア画面の作成②【ランゲーム】

今回の内容

前回の続きで、ゲームクリア時の画面を作成していきます。
以下の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