Categories: Unity

Unity本の作例改造-Chapter3-8:リトライボタンをクリックしてゲームをリセットする

明けましておめでとうございます!本年はちゃんとゲームを公開できるよう頑張ります!

Free Image on Pixabay

Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作 “の作例に色々とゲーム要素を追加してオリジナルゲームに仕上げる内容を連載をしています。


Chapter1:Unityの概要と基礎知識
Chapter2:インターフェイスと使い方
Chapter3:Unityを使ってみよう!
Chapter4:キャラクターを動かしてみよう!
Chapter5:ゲームのUIを作ってみよう!
Chapter6:ゲームを作ろう!(1)
Chapter7:ゲームを作ろう!(2)
Chapter8:2D機能を使ってみよう!

リトライボタンをクリックしたらゲームオーバー画面を非表示にする

前回は”ゲームオーバー画面を表示する“手順を行いました。今回はゲームオーバー画面でリトライボタンをクリックしてゲームをリセットするようにしたいと思います。
まずは、リトライボタンをクリックしたらゲームオーバー画面を非表示にする設定を行います。

スクリプトの作成

[Hierarchy]ウィンドウ > Canvasを選択。
[Inspector]ウィンドウ > [Add Component]ボタン > New Script を選択。
下記の通りに設定。
Name: PanelGameOver / Language: C Sharp
[Create and Add]ボタンをクリック。[Project]ウィンドウに作成したスクリプト”PanelGameOver”が表示されていることを確認しておきます。
スクリプト”PanelGameOver”をダブルクリックしてエディターを起動。下記のコードを入力します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PanelGameOver : MonoBehaviour
{
    // リトライボタンを格納する変数
    public GameObject panelGameOver;

    // ボタンをクリックした時に実行する処理
    public void StartScene()
    {
        // ゲームオーバー画面を非表示にする
        panelGameOver.SetActive(false);
    }
}

スクリプト”PanelGameOver”の変数”panelGameOver”にゲームオーバー画面UIオブジェクト割り当てる

[Hierarchy]ウィンドウ > Canvas を選択。
[Inspector]ウィンドウ > PanelGameOver (Script) > Panel Game Over フィールドの右側にある◎ボタンをクリック。ファイル選択ウィンドウが開いたら”Panel GameOver”オブジェクトをダブルクリックで選択して割り当てます。

リトライボタンをクリックしたらスクリプトを実行する設定をする

[Hierarchy]ウィンドウ > Canvas > Panel GameOver > Button Retry を選択。
[Inspector]ウィンドウ > Button (Script) > On Click () パネル右側の[+]をクリック。

左側のフィールドに[Hierarchy]ウィンドウ > Canvas をドラッグして割り当てます。

On Click () パネル右側の[No Function] > ButtonRetry > StarScene () を選択します。

動作確認

設定ができたので動作確認してみます。リトライボタンをクリックするとゲームオーバー画面が非表示になり…ません。
よく考えたらゲームオーバー画面表示の条件となっている変数の値がそのままなのでゲームオーバー画面の非表示、表示の処理がループしているようです。

リトライボタンをクリックしたら変数の値を初期化する

リトライボタンをクリックしたらゲームオーバー画面表示の条件となっている変数の値を初期化する処理を追加しましょう。

スクリプト”Manager”の編集

スクリプト”Manager”をダブルクリックしてエディターを起動。下記のコードのマーカー部分が修正箇所になります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Manager : MonoBehaviour
{
    // スクリプト間で受け渡し用に使用する変数
    // ボール残数管理用の変数
    public static int ballCount;
    // スコア管理用の変数
    public static int score;
    // シーンにボールが存在するかチェックする変数
    public static bool ballExist;
    // ゲームタイトル画面が表示されているかチェックする変数
    public static bool gameTitle;
    // ゲームオーバー画面が表示されているかチェックする変数
    public static bool gameOver;

    // ゲーム初期値設定用の変数
    // ボール残数の初期設定値を設定する変数
    public int initialBallCount;
    // スコアの初期値を設定する変数
    public int initialScore;

    // ゲームの初期化
    void Start()
    {
        // [Inspector]ウィンドウのコンポーネントパネルで設定した
        // 初期値"initialBallCount"の値を受け渡し用変数(static)に代入
        ballCount = initialBallCount;
        // [Inspector]ウィンドウのコンポーネントパネルで設定した
        //初期値"initialScore"の値を受け渡し用変数(static)に代入
        score = initialScore;
        // 変数の初期値入力
        ballExist = false;
        gameTitle = true;
        gameOver = false;
    }

    // リトライボタンをクリックした時に変数の値を初期化する処理
    public void Initialize()
    {
        ballCount = initialBallCount;
        score = initialScore;
        ballExist = false;
        gameOver = false;
    }
}

リトライボタンをクリックしたらスクリプト”Manager”の処理”Initialize”実行する設定をする

スクリプト”Manager”に追加した処理をリトライボタンで実行します。
[Hierarchy]ウィンドウ > Canvas > Panel GameOver > Button Retry を選択。[Inspector]ウィンドウ > Button (Script) > On Click () パネル右側の[+]をクリック。

左側のフィールドに[Hierarchy]ウィンドウ > Manager をドラッグして割り当てます。

On Click () パネル右側の[No Function] > Manager > Initialize () を選択します。

動作確認

ここまでの内容をWebGLでビルドしてみました。ゲームオーバー画面でリトライボタンをクリックするとゲームオーバー画面が非表示になり、ゲームがリセットできました。

corevale