▼そのUnityの作業、依頼しませんか?
サンプルゲーム・サンプルプロジェクト・ゲームの作り方・チュートリアル

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

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記事目
【Unity3Dサンプルゲーム】障害物ランを作ろう~12~【チュートリアル】【Unity3Dサンプルゲーム】Unityでサンプルゲーム【障害物ゲーム】を作成していきます。今回はゴール時に表示されるテキストをスクリプトなしで作成します。実際に動かすことをしていきます。動画よりわかりやすいサンプルゲームをぜひつくってくださいませ...
ABOUT ME
さぎのみや
さぎのみや
超書手。現在はUnityメディア「ユニシャー」の運営とゲーム開発がメインです。Unity、ライティング関係のお仕事お待ちしております。 >>詳しいプロフィール >>Amazonほしいものリスト
【Unity3D】新しいサンプルゲーム(チュートリアル)を作りました!!!
Unity有料サンプルゲーム

「Unityで3Dゲームを本格的に作っていきたい!」という人におすすめのチュートリアルとなっています。

画像のようなゲームの作り方を販売しています。色々と応用できるサンプルゲームとなっています。ぜひ、作ってみてください。

詳細
>>【Unity3Dサンプルゲーム・チュートリアル】「フリスビーを犬に届けよ!」の概要

>>BOOTHでこのチュートリアルを見る

【RT・フォローであなたのスキルが上がる】

シェアフォローする

さぎのみやのモチベが上がる

コンテンツの質が上がる

あなたの能力も上がる

あなたの
Twitterでのシェア

であなたの能力が上がります。

>>さぎのみやのツイッター(@saginomiya8)

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


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