Menu
CoddyTech

カウントダウンタイマー

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 4/56。

カウントダウンでは残り時間をfloatで保持し、毎フレームTime.deltaTimeを差し引きます。最後のフレームでちょうど0になることはめったにないため、Mathf.Maxで0に止め、終了処理は一度だけ実行する必要があります。この導火線は、プレイヤーが爆弾を解除するための5秒間を与えます。

public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;

void Update()
{
    if (exploded)
    {
        return;
    }

    fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
    fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);

    if (fuse == 0f)
    {
        exploded = true;
        fuseText.text = "BOOM";
        fuseText.color = Color.red;
    }
}

Mathf.CeilToIntは切り上げます。これはカウントダウンの表示に適しています。最初の1秒間はずっと5(4.99は切り上げて5になります)、最後の1秒間は1、時間切れになったときだけ0と表示されます。(int)fuseでは4.99が4に切り捨てられ、爆弾がまだ作動中なのに最後の1秒間ずっと0と表示されます。Mathf.RoundToIntでは最後の0.5秒間に0と表示されます。分と秒で表示する長いカウントダウンでも同じルールです。まず時間を秒単位で切り上げてから、書式を整えます。

最初のreturnによって、画面にBOOMが表示されたままになります。これがないと、次のフレームでFuse: 0がその上に書き込まれます。テキストには色もあり、fuseText.color = Color.redで赤色に変わります。

challenge icon

チャレンジ

簡単

パーキングメーターは、支払われた時間をカウントダウンします。Update()をParkingMeter.csに記述してください(シーンではmeterTextがリンクされています)。

  • timeLeftは75秒から始まり(Inspectorで設定)、フレームごとに減っていき、0未満にはなりません。
  • meterTextには残り時間を分と秒で表示し、秒単位で切り上げます。75秒から74.01秒までは1:15と表示され、残り0.4秒では0:01と表示されます。
  • スペースキーを押すとコインが投入され、30秒追加されます。ただし、maxTime(120秒。2:00と表示されます)を超えることはありません。
  • 0になると、テキストは赤色でEXPIREDと表示されます(Color.red)。その後、メーターは0のままとなり、コインを投入できなくなります。

Playを押し、コインを何枚か投入してから、Checkを押してください。

自分で試してみよう

using UnityEngine;
using TMPro;

public class ParkingMeter : MonoBehaviour
{
    public TMP_Text meterText;
    public float timeLeft = 60f;
    public float maxTime = 120f;

    void Update()
    {
        // timeLeftをカウントダウンし、分と秒で表示する。Spaceを押すと30秒加算する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン