Unityで円形ゲージ(Image)を使用したカウントダウンを作る際、ゲージが最後の1秒からしか減らない現象は多くの初心者が直面する問題です。この記事では、原因と正しい実装方法を具体例を交えて解説します。
カウントダウンゲージが正しく減らない原因
主な原因はImageのfillAmountに設定する値の範囲です。fillAmountは0.0から1.0までの範囲で指定する必要がありますが、timeの値を直接代入すると、初期値が1以上の場合や時間経過のスケールが不適切になるため、最後の1秒から減るように見えます。
また、Update関数内でTime.deltaTimeを減算しているだけでは、fillAmountのスケーリングがされずに不自然な動きになることがあります。
fillAmountを正しく設定する方法
解決策として、timeをmaxTimeで割って0~1に正規化します。例えば、10秒のカウントダウンなら、fillAmount = time / maxTimeとすることで、開始から終了まで均等にゲージが減少します。
コード例:
float maxTime = 10f; // カウントダウン開始値I.fillAmount = Mathf.Clamp01(time / maxTime);
文字表示の更新
ゲージと同時に残り時間を表示する場合も、timeを整数に変換して表示すると見やすくなります。Mathf.Ceilを使うと、最後の秒も正しく表示されます。
例:
T.text = Mathf.Ceil(time).ToString();
実装のポイントと注意点
・timeが0未満にならないようにClampや条件分岐で制御する。
・ImageのTypeがFilledで、Fill MethodがRadial360になっていることを確認する。
・Start関数でtimeの初期値をmaxTimeに設定しておくと、カウントダウンが安定する。
まとめ
Unityで円形ゲージ付きカウントダウンを作る場合、fillAmountはtimeをmaxTimeで割った値で制御し、0から1の範囲に正規化することがポイントです。文字表示はMathf.Ceilで整数に丸めることで、残り時間の表示も自然になります。これらの手順を踏めば、最後の1秒だけゲージが減る現象を防ぎ、正しいカウントダウンを実装できます。


コメント