Menu
CoddyTech

数値をフォーマットする

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

文字列に連結された数値は、C# の書式どおりに出力されます。タイマーには 12.34567 と表示され、2 の浮動小数点数は小数部なしで 2 と表示されます。代わりに、書式文字列を ToString() に指定すると、表示形式を決められます。書式文字列内の各 0 は、必ず表示される桁を表します。7.ToString("000") は 007 になり、41.27f.ToString("0.0") は小数第1位に丸められて 41.3 になります。文字列補間では、同じ書式をコロンの後に指定します。$"{coins:000}"、$"{topSpeed:0.0} m/s"。

時間は分と秒で表示すると読みやすくなります。まず時間を int にキャストして小数部分を切り捨てます。次に、整数除算で 60 で割ると分数が求まり、% 60 で余った秒数が求まります。83.46 秒のラップタイムの場合:

float lapTime = 83.46f;
int total = (int)lapTime;      // 83
int minutes = total / 60;      // 1
int seconds = total % 60;      // 23
lapText.text = $"Lap: {minutes}:{seconds:00}";   // Lap: 1:23

00 を指定すると2桁で表示されます。これがないと、64秒のラップタイムは 1:04 ではなく 1:4 と表示されます。また、(int) は丸めずに小数部分を切り捨てるため、59.7秒は 0:59 と表示されます。丸めると、一瞬 0:60 と表示されてしまいます。

challenge icon

チャレンジ

簡単

アーケードのScoreboard.csは数値をそのまま表示します。Spaceキーを押すと、コンボに100を掛けた点数が加算され、コンボが0.5増加します。また、playTimeはプレイした秒数を数えます(Inspectorでは47.5から開始します)。カウント方法はそのままにして、3つのテキストの表示方法を変更してください。

  • scoreText:スコアを6桁で表示します。例:Score: 000450。
  • comboText:コンボを小数第1位まで表示します。例:Combo: x2.5。開始時はCombo: x1.0と表示します。
  • timeText:分と秒(整数)を表示します。例:Time: 2:07。秒は常に2桁で、切り上げません。

プレイを押し、何度か得点してから、チェックを押してください。

自分で試してみよう

using UnityEngine;
using TMPro;

public class Scoreboard : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text comboText;
    public TMP_Text timeText;
    public int score;
    public float combo = 1f;
    public float playTime;

    void Update()
    {
        playTime += Time.deltaTime;
        if (Input.GetKeyDown(KeyCode.Space))
        {
            score += (int)(100 * combo);
            combo += 0.5f;
        }

        scoreText.text = "Score: " + score;
        comboText.text = "Combo: x" + combo;
        timeText.text = "Time: " + playTime;
    }
}
quiz icon腕試し

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

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