数値をフォーマットする
CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 3/60。
文字列に数値を連結すると、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:2300 を指定すると2桁で表示されます。これがないと、64秒のラップタイムは 1:04 ではなく 1:4 と表示されます。また、(int) は丸めずに小数部分を切り捨てるため、59.7秒は 0:59 と表示されます。丸めると、一時的に 0:60 と表示されてしまいます。
チャレンジ
簡単アーケードの3つの数値を整形しましょう。
Update()内で、まずint seconds = (int)playTime;を追加します。{score:000000}を使ってスコアを6桁でScore: 000450のように表示し、{combo:0.0}を使ってコンボを小数点以下1桁でCombo: x2.5のように表示します。- 時間を
Time: 2:07の形式で表示します。seconds / 60、コロン、続いてseconds % 60を2桁で表示します。
「プレイ」を押してからSpaceキーを押します。スコアは6桁のまま表示されます。その後、「確認」を押します。
自分で試してみよう
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;
}
}
本格的なゲームを作るのすべてのレッスン
自分で練習してみよう: Unityプレイグラウンド