前提・実現したいこと
Unity(C#)でカウントダウン機能と制限時間機能を1つのスクリプトで実装しようとしています。
カウントダウン機能はコルーチンで実装し、カウントダウンが終了した後にwaitForSecondsRealtime関数でフレームの一時停止を再開するようにしているのですが、Update関数内で毎フレーム毎コールされる制限時間(time.deltaTime関数で1秒ずつマイナスしていく処理)がなぜか1秒ほど経過した時点で処理が停止します。
発生している問題・エラーメッセージ
Update関数内で毎フレーム毎コールされる制限時間(time.deltaTime関数で1秒ずつマイナスしていく処理)がなぜか1秒ほど経過した時点で処理が停止する
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class timeManagement : MonoBehaviour 7{ 8 public float timerCount; 9 public Text timerText; 10 public int countdownTime; 11 public Text countdownText; 12 int seconds; 13 14 void Start() 15 { 16 timerText.text = timerCount.ToString(); 17 Time.timeScale = 0; 18 StartCoroutine(CountDownToStart()); 19 } 20 21 IEnumerator CountDownToStart() { 22 while(countdownTime > 0) { 23 countdownText.text = countdownTime.ToString(); 24 yield return new WaitForSecondsRealtime(1f); 25 countdownTime--; 26 } 27 28 countdownText.text = "start!!"; 29 Time.timeScale = 1; 30 yield return new WaitForSecondsRealtime(1f); 31 32 countdownText.gameObject.SetActive(false); 33 } 34 35 // Update is called once per frame 36 void Update() 37 { 38 timerCount -= Time.deltaTime; 39 timerText.text = Mathf.RoundToInt(timerCount).ToString(); 40 } 41} 42
試したこと
カウントダウン処理(コルーチン処理)をコメントアウトして実行すると、正常に制限時間の機能が実行され1秒1秒制限時間が減っていくことは確認しました。
補足情報(FW/ツールのバージョンなど)
unity 2018.4.11f1
countdownTimeはどこかで初期化されているのでしょうか?もしされてないのであればその値によっては CountDownToStart()内のwhile文内の処理が一切実行されないと思います。「time.deltaTime関数で1秒ずつマイナスしていく処理」とされてますが、実際には経過時間をtimerCountから引いているだけで1秒ずつ引いていないように見えるのですが、ソースコードは本当に上記のものであっていますでしょうか。
コメントいただきありがとうございます!
はい、上記ソースコードで合っております。
countdownTimeはスクリプト上で初期化せずに、Inspector上でcountdownTextのテキスト(String)に入れた値をint型に変換してcountdownTimerに格納していました。
おっしゃる通り経過時間をtimerCountから引いているのみで、1秒ずつ引いているのは私の間違いでした。
回答1件
あなたの回答
tips
プレビュー