Menu
CoddyTech

Định dạng số

Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 3 trên 60.

Khi ghép một số với chuỗi, kết quả sẽ hiển thị theo cách C# ghi số: bộ đếm thời gian hiển thị 12.34567, còn số thực có giá trị là 2 hiển thị 2, không có chữ số thập phân nào. Chuỗi định dạng trong ToString() sẽ quyết định cách hiển thị. Mỗi 0 trong chuỗi định dạng đại diện cho một chữ số luôn được ghi ra: 7.ToString("000") cho kết quả 007, còn 41.27f.ToString("0.0") cho kết quả 41.3, được làm tròn đến một chữ số thập phân. Trong phép nội suy chuỗi, bạn đặt cùng định dạng sau dấu hai chấm: $"{coins:000}", $"{topSpeed:0.0} m/s".

Thời gian sẽ dễ đọc hơn khi hiển thị bằng phút và giây. Trước tiên, ép kiểu thời gian sang int để bỏ phần thập phân; sau đó, phép chia số nguyên cho 60 cho biết số phút tròn, còn % 60 cho biết số giây còn lại. Một vòng đua dài 83.46 giây:

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 giữ hiển thị đủ hai chữ số: nếu không có nó, vòng đua dài 64 giây sẽ hiển thị là 1:4 thay vì 1:04. Và vì (int) bỏ phần thập phân thay vì làm tròn, 59.7 giây sẽ hiển thị là 0:59; nếu làm tròn, trong chốc lát nó sẽ hiển thị là 0:60.

challenge icon

Thử thách

Dễ

Định dạng ba con số của trò chơi arcade.

  1. Trong Update(), trước tiên thêm int seconds = (int)playTime;.
  2. Hiển thị điểm số bằng sáu chữ số, Score: 000450, với {score:000000}, và hệ số combo với một chữ số thập phân, Combo: x2.5, với {combo:0.0}.
  3. Hiển thị thời gian theo dạng Time: 2:07: seconds / 60, dấu hai chấm, rồi đến seconds % 60 với hai chữ số.

Nhấn Chơi rồi nhấn Space: điểm số vẫn luôn có sáu chữ số. Sau đó nhấn Kiểm tra.

Tự làm thử

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;
    }
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity