Categories: Unity

Unity本の作例改造-Chapter3-5:ボール残数を設定して画面に表示する

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


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

ボール残数表示のUIオブジェクトを作成して画面に表示する

前回の改造でボールを連続して発生できないようにしました。さらにボールを発生できる数を設定してみたいと思います。

テキストUIオブジェクトを作成 [Hierarchy]ウィンドウ > [Create]ボタン > UI > Text を選択。
作成したTextを右クリック > Rename を選択 ”Text BallCounter”に変更。

テキストの表示位置を調整

[Hierarchy]ウィンドウ > UIオブジェクト”Text BallCounter”を選択。
[Inspector]ウィンドウ > Rect Transform 左側にある四角形をクリック。
Anchor Presetが表示されたらLeft / Top をクリック。余白をクリックしてAnchor Presetを閉じる。
位置とサイズは下記の通り。
Pos X 20 / Pos Y -20 / Width 240 / Height 60 / Pivot X 0 / Y 1

テキストのサイズを調整

[Hierarchy]ウィンドウ > UIオブジェクト”Text BallCounter”を選択。
[Inspector]ウィンドウ > Text (Script) > Textフィールドに”BAll: 00″を入力。[Inspector]ウィンドウ > Text (Script) > Character > Font Size 50に設定。

ボール残数のテキストを更新するスクリプトを作成して”Canvas”割り当てる

[Hierarchy]ウィンドウ > オブジェクト”Canvas”を選択。
[Inspector]ウィンドウ > [Add Component]ボタン > New Scriptを選択して下記の通り入力。
Name: BallCounter / Language: C Sharp
[Create and Add]ボタンをクリック。

スクリプト”GameManager”の編集

[Project]ウィンドウ > スクリプト”Manager”をダブルクリックしてエディタを開き、下記コードを入力。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// UI関連クラスを使用できるようにする
using UnityEngine.UI;

public class BallCounter : MonoBehaviour
{
    // UIオブジェクト"Text BallCounter"を格納する変数
    public GameObject textBallCounter;
    // テキストコンポーネントを格納する変数
    private Text text;

    // ゲームの初期処理
    void Start()
    {
        // UIオブジェクト"Text BallCounter"のテキストコンポーネントを
        // 取得して変数"text"に格納
        text = textBallCounter.GetComponent<Text>();
    }

    // ゲーム実行中の繰り返し処理
    void Update()
    {
        // "GameManager"の変数"ballCount"の値を文字列として
        // 変数"text"に代入
        text.text = "BALL: " + Manager.ballCount.ToString();
    }
}

スクリプトの変数”Text Ball Counter”スロットにUIオブジェクト”Text BallCounter”を割り当てる

[Hierarchy]ウィンドウ > Canvas を選択。[Inspector]ウィンドウ > Ball Count (Script)コンポーネントに下記の通り変数”Text Ball Count”フィールドが表示されていることを確認。
[Hierarchy]ウィンドウ > Canvas > Text BallCount をドラッグ&ドロップで割り当て。

動作確認

[Hierarchy]ウィンドウ > Managerを選択。[Inspector]ウィンドウ > Manager (Script) > Initial BallCountフィールドに仮の数値を入力してみましょう。とりあえず今回は”777″を入力しておきます。

ゲームを再生するとボール残数テキストが”777″と表示されます。

UIオブジェクト”Text BallCounter”の表示順を変更

ゲームタイトルが表示されているときはボール残数テキストが表示されないように、作成したUIオブジェクト”Text BallCounter”は、下記の通りUIオブジェクト”Panel Title”よりも上に移動しておきます。

マウスクリックでボールを発生させたらボールの残数を減らす

ボール残数の表示ができたので、次はマウスクリックでボールを発生させたら残数表示が減るようにしましょう。

スクリプト”Spawner”を修正する

[Project]ウィンドウ > スクリプト”Spawner”をダブクリクリックで開き、下記のマーカー行の部分を追記します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    // シーンに発生させるオブジェクトを格納する変数"prefab"を宣言
    public GameObject prefab;

    // ゲーム実行中の繰り返し処理
    void Update()
    {
        // マウス左クリック(ボタン"Fire1")したとき
        if (Input.GetButtonDown("Fire1")
       // シーンにボールが存在しなければ
       // (スクリプト"Manager"の変数"ballExist"の値を参照)
       && !Manager.ballExist
       )
        {
            // 変数"prefab"に格納されたプレハブをシーンに発生させる
            Instantiate(prefab, transform.position, transform.rotation);
            // シーンにボールが存在するかチェックする変数を"false"にする
            // (スクリプト"Manager"の変数"ballExist"の値を変更)
            Manager.ballExist = true;
            // ボールの残数を管理する変数の値を減らす
            // (スクリプト"Manager"の変数"ballCount"の値を変更)
            Manager.ballCount--;
        }
    }
}

ボール残数の初期値を設定する

ゲームスタート時のボール残数を設定しましょう。
[Hierarchy]ウィンドウ > オブジェクト”Manager”を選択。[Inspector]ウィンドウ > Manager (Script) のinitialBallCount フィールドに先ほど動作確認入力した値”777″が入っていればそのままで大丈夫です。

動作確認

ここまでの内容をWebGLでビルドしてみました。ゲームを再生してマウスクリックでボールを発生させる度にボール残数表示が減るようになりました。

corevale