【Unity】もぐら叩きゲームvol.7『スコアとタイム』を表示させよう!

※アフィリエイト広告を利用しています

今回は、もぐら叩きゲームで、メインシーンにおけるスコアとタイムを表示させる実装をしていきます。

テキストで表示させるだけでなく、ゲーム開始と同時に時間経過を自動できるコードも書いていきますよ。

では、さっそくゲームを作っていきましょう!

事前準備:見た目を整える

モグラの穴を画像のように3つに表示させておきたいので、オブジェクトを選択して複製しましょう。

複製は、Ctrl+Dで可能です。

複製したら、シーンビューに切り替えて、マウス操作で直接モグラの穴の位置を調整しましょう。

手順①スコア用のUIを用意する

今まで、Canvasという名前のUIがありましたが、スコアを表示するためのUIも作っておきましょう。

まず、インスペクターのCreate→Canvasを選択します。

そして、名前をScoreCanvasと変更しましょう。

手順②テキストを用意する

テキストをふたつ用意します。

点数を表すScoreTextと残り時間を表すLeftTimeTextです。

作成したら、シーンビューのマウス操作で直接テキストを動かし、上記の画像の上部に移動させましょう。

手順③コードから時間経過の自動設定を行う

まず、Scriptフォルダを選択して、Game Manager.csを作成しましょう。

Game Manager.csをダブルクリックすると、Visual Studioが立ち上がります。

自動で時間をカウントするには、以下の2点が必要です。

  • 「残り時間:30」と書かれたテキストオブジェクトを取得する
  • 取得したテキストオブジェクトから、「30」という数値を減らしていくコードを書く

そして、以下のコードをGame Magager.csに書けば、時間のカウントができます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameManager : MonoBehaviour
{
    public Text leftTimeText;
    float leftTime = 30;
    void Update()
        {
      
            //1秒に1秒ずつ減らしていく
            leftTime -= Time.deltaTime;
            //マイナスは表示しない
            if (leftTime < 0) leftTime = 0;
            leftTimeText.text = "残り時間:" + ((int)leftTime).ToString(); 
        
        }
}
おつる

次の章から、上のコードの解説をしていきます。

テキストオブジェクトを取得する

まず、「残り時間:30」と書かれたテキストオブジェクトを取得する必要があります。

取得するには、以下のようにpublicで変数を宣言します。

public Text leftTimeText;

まず、publicで宣言することで、HierarchyからInspectorへ、以下のようにオブジェクトをアタッチできるようになります。

そして、Text型のオブジェクトなので、TextのleftTimeTextと宣言しておきましょう。

Text型を宣言するには、using UnityEngine.UI;」とコードの冒頭で記載する必要があります。

時間を取得する

時間は数値ですので、int型かfloat型のどちらかになりますが、今回は、float型で以下のように宣言します。

float leftTime = 30;

初期設定の時間は、なんでも良いですが、ここでは30秒にしたいので、30にしておきます。

int型とは、整数値を扱う時に宣言します。(例:1、2、3…)
float型とは、小数点を含む数値を扱う時に宣言します。(例:1.2、1.3、1.4…)

1秒に1秒ずつ減らしていく

Update関数の中に、以下のコードを書いていきます。

//1秒に1秒ずつ減らしていく
leftTime -= Time.deltaTime;

leftTime(30)に-= Time.deltaTime;と書くことで、1秒ずつ30が減っていくコードができます。

ちなみに、-=と、「=」の左に「-」とマイナスを書くことで、30から引いていくという意味になります。

逆に、「=」の左に「+」とプラスを書くことで、30から足していくという意味です。

Time.deltaTimeは、1秒ずつ、値を動かしたい時によく使います。

残り時間をテキストに反映させる

1秒に1秒ずつ減らす1行を書いたので、それをテキストに反映させる必要があります。

以下のように、追記しましょう。

leftTimeText.text = "残り時間:" + ((int)leftTime).ToString(); 

宣言したleftTimeTextの変数を書きます。そして、「.text」と続いて、leftTimeText.text

と記載しましょう。

leftTimeText.textは、Inspectorでいう以下の赤枠(leftTimeText)と青枠(text)を指します。

つまり、leftTimeTextというテキストコンポーネントのtext要素を、leftTimeText.textと表現しているということになります。

そして、leftTimeText.textの残り時間:30を変更したいので、「=」と書いて、どう変更したいのかを、イコールの右に書くのです。

"残り時間:" + ((int)leftTime).ToString(); 

そのまま残しておきたいから、””(ダブルクオーテーション)で「残り時間:」を囲っています。

変えたいのは、数値の30ですよね。

leftTimeはfloat型なので、文字列(String型にしなくてはいけません。

=で左辺と右辺を繋いでいるので、両方同じ型ではなくてはエラーが生じます。

そのため、ToString();という関数を使う必要があるのです。

ただし、ここで問題が生じます。

ToString();は、int型→string型にできますが、float型→string型にはできません。

ですから、float型→int型→string型にする必要があります。

したがって、 ((int)leftTime).ToString(); (int)leftTimeで一回、int型にした上で、ToString();を使うのです。

おつる

型変換するなら、最初からint型でleftTimeを宣言すればよかったと思う方もいるかもしれませんが、Time.deltaTimeはfloat型にしか使えないので、今回の型変換は仕方ありません。

残り時間のマイナス表示をなくす

現状だと、30秒以上過ぎたら、値がどんどんマイナス表示になっていきます。

0になったら、0で値が止まるようにコードを書く必要があります。

//マイナスは表示しない
if (leftTime < 0) leftTime = 0;

実は、とても簡単で、if文でleftTimeが0より小さいなら、leftTimeを0にするという1行です。

これで、ゲームスタートと同時に、時間のカウントが始まるようになります。

まとめ:時間表示でゲームっぽく仕上げよう!

ここまで、スコアとタイムのテキスト表示と、ゲーム開始と同時にタイムカウントの方法をお伝えしました。

コード的には、数行で終わりますが、短いコードの中には、intやfloat、コンポーネントの概念など、いろんな知識が必要となります。

実際に、ゲームを作りながら、Unityの理解を深めていきましょう。

コメントを残す

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

ABOUT US

おつる
2児の息子の専業主婦です。長男は、ややADHD気質がありますが、毎日奮闘中。夫が、発達支援の仕事をしていたこともあり、いつも勉強になります。日々感じたことを子育てで役に立つノウハウとして記事でアウトプットしています。デザインが得意!ブログのサムネイル、アイコンなど、すべて手作りです!よろしくお願いします!