Search…

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

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

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

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024