みなさんこんにちは!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”をダブルクリックしてエディタを開き、下記コードを入力。
1234567891011121314151617181920212223242526272829
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″を入力しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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(); } } |
ゲームを再生するとボール残数テキストが”777″と表示されます。
UIオブジェクト”Text BallCounter”の表示順を変更
ゲームタイトルが表示されているときはボール残数テキストが表示されないように、作成したUIオブジェクト”Text BallCounter”は、下記の通りUIオブジェクト”Panel Title”よりも上に移動しておきます。
マウスクリックでボールを発生させたらボールの残数を減らす
ボール残数の表示ができたので、次はマウスクリックでボールを発生させたら残数表示が減るようにしましょう。
スクリプト”Spawner”を修正する
[Project]ウィンドウ > スクリプト”Spawner”をダブクリクリックで開き、下記のマーカー行の部分を追記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
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でビルドしてみました。ゲームを再生してマウスクリックでボールを発生させる度にボール残数表示が減るようになりました。