Unityで円形ゲージ付きカウントダウンを正しく表示する方法

C言語関連

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秒だけゲージが減る現象を防ぎ、正しいカウントダウンを実装できます。

コメント

タイトルとURLをコピーしました