Chơi lại màn
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 18 trên 60.
Cách nhanh nhất để đặt lại một màn chơi là tải lại màn đó. SceneManager.GetActiveScene() trả về cảnh đang mở, còn name (hoặc buildIndex) của cảnh là giá trị mà LoadScene nhận. Nút Khởi động lại trên bảng thông báo kết thúc trò chơi gọi:
public void Restart()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}Unity hủy cảnh đang mở rồi dựng lại cảnh từ tệp cảnh. Mọi đối tượng trở về vị trí mà cảnh đã đặt, kể cả chiếc thùng mà người chơi làm đổ. Mỗi trường lại nhận giá trị trong Inspector, và Awake cùng Start chạy lại. Bạn không cần viết code để đưa từng thứ về vị trí cũ. Vì nút yêu cầu cảnh hiện hoạt thay vì một tên như "Level3", cùng một script có thể khởi động lại bất kỳ màn chơi nào có đặt nó.
Trường static không thuộc về cảnh: nó thuộc về lớp, nên khi tải lại, nó vẫn giữ nguyên giá trị. private static float bestTime; giữ thời gian tốt nhất qua các lần khởi động lại, còn private float time; thông thường bắt đầu lại từ 0 trong cảnh mới. GameManager.Instance cũng là static: sau khi tải lại, nó vẫn trỏ đến GameManager đã bị hủy cho đến khi Awake của GameManager mới gán lại giá trị.
Thử thách
DễKhi rơi, hãy khởi động lại màn chơi mà người chơi đang ở và tăng số lần rơi.
- Thêm
using UnityEngine.SceneManagement;và đổi biến đếm thànhprivate static int falls;để giữ nguyên giá trị sau khi tải lại. - Trong
Update(), khiplayer.position.y < fallY, hãy thực hiệnfalls++;rồi tảiSceneManager.GetActiveScene().name.
Nhấn Chơi rồi bước khỏi mép vực ở cả hai màn chơi: Falls: 1, sau đó là Falls: 2. Tiếp theo, nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
using TMPro;
public class LevelRestart : MonoBehaviour
{
public Transform player;
public TMP_Text fallsText;
public float fallY = -3f;
private int falls;
void Start()
{
fallsText.text = "Falls: " + falls;
}
void Update()
{
// Khi ở dưới fallY: tăng số lần rơi và khởi động lại màn chơi hiện tại
}
}
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