Đồng hồ đếm ngược
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 4 trên 60.
Đồng hồ đếm ngược lưu thời gian còn lại dưới dạng float và trừ Time.deltaTime khỏi giá trị đó ở mỗi khung hình. Khung hình cuối hiếm khi dừng đúng ở 0, vì vậy Mathf.Max giữ giá trị ở đó, và hành động kết thúc chỉ được diễn ra một lần. Cầu chì này cho người chơi 5 giây để gỡ bom:
public TMP_Text fuseText;
public float fuse = 5f;
private bool exploded;
void Update()
{
if (exploded)
{
return;
}
fuse = Mathf.Max(fuse - Time.deltaTime, 0f);
fuseText.text = "Fuse: " + Mathf.CeilToInt(fuse);
if (fuse == 0f)
{
exploded = true;
fuseText.text = "BOOM";
fuseText.color = Color.red;
}
}Mathf.CeilToInt làm tròn lên, đúng như cách đồng hồ đếm ngược hiển thị: 5 trong suốt giây đầu tiên (4.99 được làm tròn lên thành 5), 1 trong giây cuối cùng và 0 chỉ khi hết giờ. (int)fuse sẽ cắt 4.99 xuống thành 4 và hiển thị 0 trong suốt giây cuối cùng khi bom vẫn đang tích tắc; Mathf.RoundToInt sẽ hiển thị 0 trong nửa giây cuối. Đồng hồ đếm ngược dài hơn, hiển thị bằng phút và giây, cũng tuân theo quy tắc tương tự: trước tiên làm tròn thời gian lên đến số giây nguyên, rồi định dạng các giây đó.
return sớm giữ BOOM trên màn hình: nếu không có nó, khung hình tiếp theo sẽ ghi đè bằng Fuse: 0. Văn bản cũng có màu, và fuseText.color = Color.red sẽ chuyển văn bản thành màu đỏ.
Thử thách
DễHãy để đồng hồ tính tiền đỗ xe đếm ngược thời gian đã trả tiền.
- Trong
Update(), trừTime.deltaTimekhỏitimeLeft, không để giá trị xuống dưới 0, rồi hiển thịMathf.CeilToInt(timeLeft)dưới dạng phút và giây:1:15. - Phím cách cộng thêm 30 giây, tối đa là
maxTime(2:00). - Khi thời gian về 0, hiển thị
EXPIREDbằngColor.red. Bắt đầuUpdate()bằngif (timeLeft == 0f) return;để đồng hồ giữ nguyên trạng thái đó.
Nhấn Chơi rồi nạp xu vào đồng hồ: thời gian dừng ở 2:00. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
using TMPro;
public class ParkingMeter : MonoBehaviour
{
public TMP_Text meterText;
public float timeLeft = 60f;
public float maxTime = 120f;
void Update()
{
// Đếm ngược timeLeft và hiển thị theo phút, giây; nhấn Space để cộng thêm 30 giây
}
}
Tất cả bài học trong Xây dựng trò chơi thực tế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàngTự luyện tập: Playground Unity