みなさんこんにちは!Unityの入門書で通称”ヒヨコ本”として親しまれている”Unity5入門 最新開発環境による簡単3D&2Dゲーム制作 “の作例に色々とゲーム要素を追加してオリジナルゲームに仕上げる内容を連載をしています。
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でビルドしてみました。ゲームを再生してマウスクリックでボールを発生させる度にボール残数表示が減るようになりました。