【Unity3Dサンプルゲーム】障害物ランを作ろう~11~【チュートリアル】

障害物ランを作ろう~10~の続きです。

時間経過を表すタイマーを作ります。ゲームスタートしてから0→1→2となるような感じですね。

目次

前提条件

【Unity3Dサンプルゲーム】障害物ランを作ろう~10~まで終わらせておいてください。

今回の流れ

  1. UIオブジェクト「Text」を作成する
  2. Textの名前を「TimeText」と変更する
  3. 位置を右上に設定する
  4. 位置を調節する
  5. 「TimeText」にスクリプトの追加,アタッチする
  6. 【Time】スクリプトを開く
  7. スクリプトを書く
  8. 動作確認

UIオブジェクト「Text」を作成する

UIオブジェクト「Text」を作成する

●「Text」を作成する

【Hierarchy】→【Create】→【UI】→【Text】

「Text」作成後のHierarchy

「Text」作成後のHierarchy

Canvasの子に「Text」が作られます。Aの中に入っているBというオブジェクトがあるとしたら、そのBは「Aの子」といいます。

この場合ではCanvasの子ですね。

Textの名前を「TimeText」と変更する

●「Text」の名前変更

【Text】→【右クリック】→【Rename】→【TimeText】

Cubeの名前を変更したときと同じですよ。

名前の変更の仕方がわからない方は戻るか、【unity】物体(ゲームオブジェクト)の名前変更をわかりやすく説明をご覧ください

位置を右上に設定する

位置を右上にする

●位置を右上にする

【TimeText】→【React Transform】→【右上(top-right)】

上手く説明できないので、上のGifをご覧ください。

位置を調節する

「TimeText」の位置を変更する

●【TimeText】の位置を調節

【TimeTextを選択】→【Inspector】→【Transform】→【上記のように数値を変更】

テキスト・サイズ・色を変更する

「TimeText」をカラーを設定

●テキスト・サイズ・色を変更する

【TimeTextを選択】→【Inspector】→【Text(Script)】→【上記のように設定】

今のままだと、時間がみにくいので、テキスト・サイズ・色を変更しています。色は緑じゃなくていいです。

色の変更の仕方

「Timetext」カラー変更

この円の中の四角や周りの円をさわれば、色が変わります。緑じゃなくてもいいですよ。

ここまでの確認

「障害物ゲーム」成果物

GameビューがこうなっていればOKです。

「TimeText」にスクリプトの追加,アタッチする

タイマーを設置

●【TimeText】にスクリプトの追加,アタッチする

【TimeText】→【Inspector】→【Add Component】→【New script】→【Timerを入力】→【Create and Add】

【Timer】スクリプトを開く

Timerスクリプトを開く

●【Timer】スクリプトを開く

【Projectウィンドウ】→【Assets】→【Timerをダブルクリック】→【Visual StudioかMonoDevelopが開く】

Visual StudioかMonoDevelopどっちが開いても同じコードを入力してください。自分はVisual Studioです。

スクリプトを書く

以下のコードを書いていきます。コードが小さくてごめんなさい。お使いのブラウザで拡大してご覧ください。検索すれば出ると思われます。

あと、最後の「}」を忘れないでください。「//」はコメントなので、実行されません。

Timer

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 1.UIシステムを利用するときに利用(今回でいう「Text」)
using UnityEngine.UI;

public class Timer : MonoBehaviour
{

    // 2.時間経過を示す「time」変数
    public static float time;

    // Use this for initialization
    void Start()
    {

        // 3.ゲーム開始時は「time」は「0」
        time = 0;

    }

    // Update is called once per frame
    void Update()
    {

        // 4.まだゴールをしてなかったら
        if (Goal.goal == false)
        {
            // 5.経過時間を追加
            time = time + Time.deltaTime;
        }

        // 6.小数点以下を切り捨てる
        int t = Mathf.FloorToInt(time);

        // 7.「Text」Componentを取得して、「uiText」に格納
        Text uiText = GetComponent<Text>();

        // 8.テキストを編集
        uiText.text = "Time = " + t;
    }
}

スクリプトの説明

1.UIシステムを利用するときに必要なライブラリ読み込む

Timer

// 1.UIシステムを利用するときに利用(今回でいう「Text」)
using UnityEngine.UI;

【Hierarchy】→【Create】→【UI】→【Text】

でテキストを作成しましたよね。その「Text」を利用するため、このライブラリを使います。

2.時間を表す変数「time」

Timer

// 2.時間経過を示す「time」変数
public static float time;

「time」という変数に何秒とか表すようにします。

3.ゲーム開始時の時間は「0」秒とする

Timer

// Use this for initialization
void Start () {

// 3.ゲーム開始時は「time」は「0」
time = 0;

}

void Start () {} ゲーム開始時の処理を書く
time = 0; ゲーム開始時の時間は「0」

ゲーム開始時の処理を書いています。ゲーム開始時は時間はたっていないので、「time」変数に0を入れます

4・5.ゴールしていないときの処理を書く

Timer

// 4.まだゴールをしてなかったら
if(Goal.goal == false)
{
// 5.経過時間を追加
time = time + Time.deltaTime;
}

if(A.B == false){C} もしAスクリプトのB変数の値が「false」のときCをする
time = time + Time.deltaTime; timeに時間経過を表してくれる「deltaTime」を追加する

if(Goal.goal == false){}は「Goal」スクリプトの「goal」変数が「false」だったときという、if文を表しています。

 

「Goal」スクリプトの「goal」変数を覚えていますか?前の記事で設定した変数ですよ。ここでフラグ回収です。

time = time + Time.deltaTime;で1、2,3(本当は少数点以下まである)と時間を「time」に追加してくれます。

まとめると、Goalスクリプトのgoal変数がfalseだったらね→time変数に時間を追加するよ

6.少数点を切り捨てる

Timer

// 6.小数点以下を切り捨てる
int t = Mathf.FloorToInt(time);

Mathf.FloorToInt(A); A変数の少数点以下を切り捨てる

Mathf.FloorToInt(time);でtime 変数「time」の小数点以下を切っています。そして小数点以下がない「time」を「t」変数に格納しています。

7.「Text」Componentを取得して「uiText」に格納

Timer

// 7.「Text」Componentを取得して、「uiText」に格納
Text uiText = GetComponent<Text>();

GetComponent<A>() 「A」というComponentを取得する

オブジェクトを選択したときにInspectorにあるのが「Component」です。

今回は「Text」というComponentを持ってきています。その持ってきたComponentを「uiText」に入れてます。

8.「Text」のTextを編集する

Timer

// 8.テキストを編集
uiText.text = "Time = " + t;

7で取得した「Text」Componentの「Text」の文言を変えます。つまり「Time = 0」の文言を変えます。

timeの文言を変える

0の部分が変化するように、"Time = " + t;となっています。

スクリプト全体の説明

まとめると、時間を表す「time」変数を用意するよ→ゴールするまではtimeに経過時間を追加するよ→timeの小数点を切ってt変数に格納するよ→「Text」Component取得したやつをuiTextに格納するよ→最後に時間の経過がわかるようにテキストを変更するよ。

スクリプトを保存

timerスクリプトを保存する

Visual Studioの場合→【ファイル】→【すべて保存か〇〇の保存】(WindowsでCTRL + Sでも可)

MonoDevelopの場合→【File】→【Save】

動作確認

タイマーが実際に停止するかの確認

timeが止まる

上部の【▶】でゲームを開始してみてください。

●確認事項

  • ゲーム開始するとTimeの値が変わる
  • ゴールまでいくとTimeが止まる

では次のゴール時のテキストを作っていきましょう

あわせて読みたい
【Unity3Dサンプルゲーム】障害物ランを作ろう~12~【チュートリアル】 障害物ランを作ろう~11~の続きです。 ゲームクリアしたときにクリアしたことを表す文字とそのときのスコアといままでの最高スコアを表示するテキストとはじめからやり...
Unity3Dサンプルゲーム【障害物ラン】11記事目

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次