Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Game nào cũng cần một màn hình menu: nút chơi, nút thoát, đôi khi có cài đặt. Bài này hướng dẫn bạn dựng menu chính bằng hệ thống UI của Unity, viết script chuyển giữa các scene và xử lý nút thoát đúng cách trên cả Editor lẫn bản build.
Scene là một "màn" chứa tập hợp các GameObject. Menu chính, màn chơi 1 và màn chơi 2 thường là các scene riêng. Chia nhỏ như vậy giúp mỗi màn nhẹ, dễ quản lý và dễ làm việc nhóm. Để chuyển qua lại, ta dùng lớp SceneManager, và các scene này phải được thêm vào danh sách build.
MainMenu trong thư mục Assets/Scenes.Game (có thể sao chép từ màn chơi bạn đã làm).Nếu quên bước thêm vào Build Settings, bạn sẽ gặp lỗi khi gọi chuyển scene vì Unity không tìm thấy scene.
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
[SerializeField] private string gameSceneName = "Game";
[SerializeField] private GameObject helpPanel;
public void PlayGame()
{
SceneManager.LoadScene(gameSceneName);
}
public void ToggleHelp(bool show)
{
if (helpPanel != null) helpPanel.SetActive(show);
}
public void QuitGame()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}Hàm Application.Quit() không có tác dụng trong Unity Editor, nên ta dùng chỉ thị tiền biên dịch #if UNITY_EDITOR để dừng chế độ Play khi đang thử nghiệm, và gọi thoát thật ở bản build. Trên một số nền tảng như iOS hay WebGL, việc tự thoát ứng dụng không phù hợp hoặc không có tác dụng, nên hãy cân nhắc ẩn nút Thoát ở các nền tảng đó.
MenuController và gắn script MainMenu.+.MenuController vào ô đối tượng, chọn MainMenu > PlayGame() trong danh sách hàm.QuitGame) và nút Hướng dẫn (ToggleHelp, tick giá trị bool cho đúng).Nhấn Play và thử bấm nút. Nút Chơi nên đưa bạn vào scene Game. Nếu không có gì xảy ra, kiểm tra EventSystem, tên scene gõ đúng chưa và scene đã nằm trong Build Settings chưa.
Trong scene Game, tạo script để nhấn Escape quay về menu:
using UnityEngine;
using UnityEngine.SceneManagement;
public class ReturnToMenu : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
Time.timeScale = 1f;
SceneManager.LoadScene("MainMenu");
}
}
}Dòng đặt Time.timeScale = 1f phòng trường hợp trước đó bạn tạm dừng game bằng cách đặt thang thời gian bằng 0, nếu không, scene mới sẽ bị đứng hình. Nếu dự án dùng Input System mới, hãy dùng API của nó thay vì lớp Input cũ.
SceneManager.LoadSceneAsync và thanh tiến trình cho màn tải dài.PlayerPrefs.Một menu chính hoàn chỉnh gồm Canvas co giãn, vài nút, một script nhỏ và danh sách scene đúng. Đây là bước biến dự án thử nghiệm thành một sản phẩm có đầu có cuối, và là nền để thêm màn chọn level, cửa hàng hay cài đặt.
Để hoàn thiện game của bạn cùng người hướng dẫn, hãy tham khảo các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment