Unityでカウントダウンタイマーを作成したい!
どうも、Linです。銭湯が、呼んでます。
Unityでアプリを作成しているとつけたくなる機能。
それは、
カウントダウンタイマー機能
ではないでしょうか?
制限時間をつけた方がゲーム性が増して面白くなりますからね。また、ゲームではなくとも、単純なタイマーアプリを作ってみたいというときもあるでしょう。
今日はそんなUnityでのカウントダウンタイマー機能の作り方をわかりやすくまとめてみました。
Unityでカウントダウンタイマー機能を作成する方法
Unityでカウントダウンタイマー機能を作りたい場合は、
TimeクラスのdeltaTime変数を利用するのが良いでしょう(くわしくはUnityの公式レファレンスへ)
deltaTime変数は何かというと、
1フレームあたりにかかる時間のことです。

わかりやすくいうと、Update関数が読み込まれる時間の間隔。
ゲームが動作するマシーンのスペックにもよるのですが、ぼくのMacでは1フレームあたり
0.016~0.018秒
ぐらいでしたね。
この「TimeクラスのdeltaTime変数」をフレームごとに足したり引いたりするとタイマーが作れるというわけですね。
Step1. テキスト配置
タイマーを表示するテキストをヒエラルキーに配置します。

名前をTimerTextとでもしておきましょう。
テキストのフォントや色や位置などはお任せです。
Step2. 空のオブジェクト作成
次に、空のオブジェクトを作成します(Ctl+Shift+N)。
タイマーをコントロールするスクリプトをこいつにアタッチしていきますよ。

Step3. スクリプト作成
タイマーをコントロースするスクリプトを作成。
TimerController.cs
とでもしましょう。

作成したら空のオブジェクトGameObjectにアタッチしましょう。

Step4. コード書く
先ほどのスクリプト(TimerController.cs)にコードを書いていきましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TimerController : MonoBehaviour { public Text timerText; public float totalTime; int seconds; // Use this for initialization void Start () { } // Update is called once per frame void Update () { totalTime -= Time.deltaTime; seconds = (int)totalTime; timerText.text= seconds.ToString(); } }
ここでのポイントは、
- Textクラスを扱うのでusing UnityEngine.UIという名前空間を追加
- フレームごとにフレームの秒数(Time.deltaTime)を引いている
- 合計時間の変数totalTimeをpublicにすることでInspectorより変更可能
- seconds(int型の変数)にfloat型のtotalTimeをintにキャストしたものを代入して小数点以下を抹殺
- secondsをToStringメソッドで文字列にしてからテキストに表示
という5点ですね。
変数の型がint, float, stringの3種類入り混じってくるのでそこをうまく処理できれば大丈夫です。
Step5. タイマー時間を設定
タイマー時間をパブリックな関数に設定したのでInspectorから設定しましょう。
今回は60秒と設定してみます。
Step6. テキストをアウトレット接続
あとはカウントタイマーを表示するテキストをアウトレット接続して代入。
これでカウントダウンタイマー機能完成です!
ゲームを再生してみると、こんな感じで60秒からしっかりカウントダウンできていると思います。
逆にカウントアップするタイマーを作りたいときは??
では、今度は逆にカウントダウンではなくカウントアップするタイマーを作りたいときはどうすればいいのでしょうか??
じつはカウントダウンタイマーとの違いは一箇所で、
Time.deltaTimeをフレームごとに引くのではなく足せばいいのです。
Update関数を下のように修正して、
void Update () { totalTime += Time.deltaTime; seconds = (int)totalTime; timerText.text= seconds.ToString(); }
totalTime変数を0に変更してみましょう。

すると、

うん。0からカウントアップできてますね。
あとはお好みにUnityのタイマーをカスタマイズしてっちゃってくださいね。
それでは!
Lin

おそらく、ブロガー。
今年でフリーランス 6年目。