作成したスクリプト
タイマーには、以下の機能が備わっています。
- カウントダウンの機能
- 時間をUIのテキストに表示
- 特定の時間になったら処理を行う(残り5秒になったら文字を赤くする)
- 時間が0になったら、何らかの処理を行う。
- 関数の説明は以下の通り。
先ほどのスクリプトには、外部から呼び出すために3つの関数が用意されています。
CStart | カウントを、はじめから行う。 |
---|---|
Restart | Pauseで中断したカウントを再開する。 |
Pause | カウントを中断 |
using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using System; using UnityEngine.UI; public class CountDownTimer : MonoBehaviour { float time = 0; //現在のタイム bool isRunning = false; //カウントしている状態か [SerializeField] float limitedTime; //制限時間 [SerializeField] Text text; //表示用テキスト [SerializeField] List<Schedule> schedules; //指定した時間に呼び出す処理 [SerializeField] UnityEvent endEvent; //カウント終了後の処理 //スケジュール用クラス [Serializable] public class Schedule { [SerializeField] float _time = -1; //マイナスの値を設定しておく [SerializeField] UnityEvent _unityEvent; public float Time { get => _time; set => _time = value; } public UnityEvent UnityEvent { get => _unityEvent; set => _unityEvent = value; } } //はじめから public void CStart() { time = limitedTime; isRunning = true; } //つづきから public void Restart() { isRunning = true; //time < 0なら、初めからカウントする if (time < 0) { time = limitedTime; } } //一時停止 public void Pause() { isRunning = false; } void Update() { //Debug.Log($"{time}:{isRunning}"); if (isRunning) { //時間を減らす time -= Time.deltaTime; //タイマーの指定した時間になったかどうか for (int i = 0; i < schedules.Count; i++) { //スケジュールを実行 if (schedules[i].Time > time) { schedules[i].UnityEvent.Invoke(); //実行したら、そのスケジュールは取り除く schedules.RemoveAt(i); break; } } //UIを更新 text.text = $"Time:{time.ToString("F2")}"; //0未満になったら終了 if (time < 0) { isRunning = false; text.text = $"Time:{0.0f.ToString("F2")}"; endEvent.Invoke(); } } } }
使用例1(関数の動作チェック)
1. テキストの用意
適当なプロジェクトを立ち上げたら、右クリック⇒「UI」⇒「Text」と選択して、テキストを設置する。
2. スクリプトの設定
「CountDownTimer.cs」を先ほど設置したテキストにアタッチして、次のように設置する。
3. 実行結果の確認
使用例2(UnityEventでの処理の呼び出し)
1. 処理の作成
以下のスクリプトを作成する。
using UnityEngine; using UnityEngine.UI; public class Sample : MonoBehaviour { [SerializeField] Text text; public void Red() { text.color = Color.red; } public void Green() { text.color = Color.green; } public void Yellow() { text.color = Color.yellow; } }
3. 実行結果の確認
実行すると、10秒を切ると緑、5秒を切ると赤、0になると黄色になることが確認できます。