STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • Bình luận
    • Sao chép

    Hiện Thực Game Zero Với Unity - Phần 4 - Scene Và Popup

    Hướng Dẫn Hiện Thực Game Zero Với Unity. Thiết kế hệ thống scene và popup trong game.

    Rye Nguyen

    10/08/2015
    30/09/2020
    4 phút đọc
    Hiện Thực Game Zero Với Unity - Phần 4 - Scene Và Popup

    Bài viết nằm trong chuỗi Hướng Dẫn Hiện Thực Game Zero Với Unity, cung cấp kiến thức trong việc xây dựng 1 game trên Unity, đồng thời biết cách tổ chức project hiệu quả trong Unity.

    Trong bài viết này sẽ tập trung thiết kế hệ thống scene và popup trong game. Ngoài ra, mở rộng thêm 1 chút về gameplay đã tương đối hoàn thiện trong các bài viết trước.

    Quản lý GameState trong game

    Trong Zero, khi người chơi không vượt qua được 1 level, hoặc CurrentTime vượt quá LevelTime, 1 popup sẽ xuất hiện và lượt chơi sẽ kết thúc, điểm số cuối cùng sẽ được hiển thị. Để kiểm soát quá trình này, ứng dụng 1 kỹ thuật quản lý GameState đơn giản, sử dụng 1 thuộc tính để lưu trữ GameState.

    Trước hết, GameState được định nghĩa là 1 enum trong Statics.cs như sau (dòng 16-20, Statics.cs):

    public enum GameState
    {
          PLAYING,
          FAILED
    }

    Khai báo thuộc tính lưu trữ GameState, đặt trong GameManager với tuỳ chọn HideInInspector để không hiển thị tại cửa sổ Inspector (dòng 26, GameManager.cs):

    public GameState        m_gameState;

    Thiết lập giá trị ban đầu cho GameState trong hàm Start (dòng 46, GameManager.cs):

    m_gameState = GameState.PLAYING;

    Ngay khi GameScene được nạp, trạng thái của game sẽ được cập nhật là PLAYING, đồng nghĩa game sẽ được bắt đầu ngay lập tức. Ở 2 button, các phím mũi tên tương ứng và vị trí kiểm tra m_currentTime, cập nhật lại trạng thái game thành FAILED khi người chơi không vượt qua được 1 level.

    Để quản lý trạng thái của game, hiện thực việc kiểm tra m_gameState trong hàm Update của GameManager.cs. Tại đây dùng cấu trúc rẽ nhánh switch… case để quản lý tương tự như sau:

    switch(m_gameState)
    {
        case GameState.PLAYING:
            // Logic Game
            break;
        case GameState.FAILED:
            // Do something
            break;
    }

    Đến đây, cơ bản đã quản lý được trạng thái của game. Tuy nhiên, khi người chơi thua, game sẽ dừng lại và không có cách nào đưa game trở lại trạng thái ban đầu. Đó là do chưa hiện thực 1 thao tác nào để trả giá trị của m_gameState về PLAYING. Phần bên dưới sẽ hiện thực điều đó.

    GameOver popup

    Đây là đối tượng sẽ xuất hiện khi người chơi trả lời sai. Trên GameOver popup sẽ hiển thị điểm số người chơi đạt được, điểm số cao nhất (Best Score) và 1 số button. Giao diện của GameOver popup tương tự như sau:

    ss_1

    Các dòng chữ "Your Score", "Best Score", số điểm và các button đều là các đối tượng UI.

    Hiện thực hàm ShowGameOverPopup để hiển thị GameOver popup như sau:

    public void ShowGameOverPopup()
    {
          m_gameOverPopup.enabled = true;
    
          m_gameState = GameState.FAILED;
          m_popupScore.text = Static.s_score.ToString();
    
          if(PlayerPrefs.GetInt("BestScore") < Static.s_score)
                PlayerPrefs.SetInt("BestScore", Static.s_score);
    
          m_popupBestScore.text = PlayerPrefs.GetInt("BestScore");
    }

    Đối với việc hiển thị điểm hiện tại, sử dụng biến s_score trong Statics.cs. Đối với BestScore, sử dụng PlayerPrefs để lưu trữ xuống bộ nhớ máy, sử dụng cho các lần chơi sau. 

    Hàm ShowGameOverPopup sẽ được gọi khi người chơi thua, do đó thay thế các dòng code thay đổi m_gameState sang FAILED bằng việc gọi hàm ShowGameOverPopup

    MenuScene

    MenuScene của Zero khá đơn giản, bao gồm button Play và 1 button mở InfoPopup.

    ss_4

    Info popup

    ss_5

    Các button Play của MenuScene và button Menu, Replay của GameScene là các liên kết qua lại giữa 2 scene trong Zero.
    Để link được giữa 2 scene, phải thêm cả 2 scene này vào Build Setting, sau đó sử dụng hàm LoadLevel thuộc lớp Application để chuyển scene.

    Đối với button Back tại InfoPopup, sử dụng event OnClick để bật/tắt poup (canvas).

    Download Project

    STDIO_ZeroUnity-4.zip.

    Bài chung series

    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Phù hợp cho bạn

    Đề xuất

    Hiện Thực Game Zero Với Unity - Phần 2 - Hiện Thực Gameplay

    Hiện Thực Game Zero Với Unity - Phần 2 - Hiện Thực Gameplay

    Hướng Dẫn Hiện Thực Game Zero Với Unity. Giới thiệu và hướng dẫn xây ...

    Lập Trình GameCùng làm game

    09/08/2015

    Hiện Thực Game Zero Với Unity - Phần 3 - Điểm Số Và Progress Timer

    Hiện Thực Game Zero Với Unity - Phần 3 - Điểm Số Và Progress Timer

    Hướng Dẫn Hiện Thực Game Zero Với Unity. Hướng dẫn cài đặt tính năng ...

    Lập Trình GameCùng làm game

    10/08/2015

    Khám phá thêm

    Hiện Thực Game Zero Với Unity - Phần 1 - Nhận Sự Kiện Button

    Hiện Thực Game Zero Với Unity - Phần 1 - Nhận Sự Kiện Button

    Hướng Dẫn Hiện Thực Game Zero Với Unity. Thiết lập môi trường phát triển ...

    Lập Trình GameCùng làm game

    09/08/2015

    Hiện Thực Game Zero Với Unity - Phần 5 - Âm Thanh Và Effect

    Hiện Thực Game Zero Với Unity - Phần 5 - Âm Thanh Và Effect

    Hướng Dẫn Hiện Thực Game Zero Với Unity. Hướng dẫn các hiệu ứng âm thanh ...

    Lập Trình GameCùng làm game

    11/08/2015

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 2: Hiện Thực LoadScene

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 2: Hiện Thực LoadScene

    Hướng dẫn cách để hiện thực một scene trong game, cũng như cách để ...

    Lập Trình GameCùng làm game

    01/03/2015

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 7: Hiện thực GameScene - Button

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 7: Hiện thực GameScene - Button

    Hướng dẫn gắn thêm các button vào game, và hiện thực hàm resetButton cho ...

    Lập Trình GameCùng làm game

    12/03/2015

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 4: Hiện thực MainMenuScene

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 4: Hiện thực MainMenuScene

    Hướng dẫn tạo màu nền cho background, tạo sprite gắn vào scene, tạo ...

    Lập Trình GameCùng làm game

    05/03/2015

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 9: Hiện thực GameScene - Điểm Số

    Hướng Dẫn Viết Game Zero Với Cocos2d-x - Phần 9: Hiện thực GameScene - Điểm Số

    Hướng dẫn cách hiện thực GameScene, cách tính điểm và update điểm số lên ...

    Lập Trình GameCùng làm game

    15/03/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020