Menu
CoddyTech

Một script chạy trò chơi

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 12 trên 60.

Đặt điểm số trong script của người chơi, số mạng trong script sức khỏe và phần kiểm tra kết thúc trò chơi trong một script thứ ba. Mỗi script đều cần các con số của những script khác, nên mỗi quy tắc mới lại tác động đến nhiều tệp. Các trò chơi Unity thường giao những con số đó cho một script duy nhất, GameManager, gắn trên một GameObject trống riêng. Script này quản lý điểm số, số mạng và quy tắc kết thúc trò chơi. Các script khác chỉ báo cáo những gì đã xảy ra bằng cách gọi các phương thức công khai của nó. Trong loạt sút luân lưu này, lưới báo mỗi bàn thắng:

public class GameManager : MonoBehaviour
{
    private int goals;
    private int shotsLeft = 5;

    public void ShotTaken(bool scored)
    {
        if (shotsLeft == 0) return;
        shotsLeft--;
        if (scored) goals++;
        Debug.Log("Goals: " + goals + ", shots left: " + shotsLeft);
        if (shotsLeft == 0) Debug.Log("Full time: " + goals + " goals");
    }
}
// Net.cs, trên vùng kích hoạt của khung thành
public GameManager game;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Ball")) game.ShotTaken(true);
}

Lưới không biết còn bao nhiêu lượt sút hoặc khi nào trận đấu kết thúc. Nó báo có bàn thắng, còn trình quản lý quyết định điều đó có nghĩa là gì; script của thủ môn báo một pha cản phá bằng game.ShotTaken(false). Với loạt sút luân lưu gồm 3 lượt sút, bạn chỉ cần thay đổi một con số trong một script. Phần kiểm tra ở đầu ShotTaken ngăn quả bóng lăn vào lưới sau khi hết giờ bị tính điểm.

Bạn điền trường game trong Inspector bằng cách kéo đối tượng GameManager vào đó, rồi Unity tìm script GameManager trên đối tượng ấy. Trình quản lý cũng là nơi đặt HUD: khi nó giữ phần văn bản điểm số và bảng kết thúc trò chơi, màn hình sẽ thay đổi trong cùng phương thức cập nhật các con số, và không script nào khác tác động đến giao diện.

challenge icon

Thử thách

Dễ

Để GameManager quản lý điểm số và số mạng.

  1. AddScore(int points): nếu gameOver chưa xảy ra, cộng vào score và hiển thị Score: 6 trong scoreText.
  2. LoseLife(): giảm lives đi 1 và hiển thị Lives: 2; khi bằng 0, đặt gameOver, hiển thị gameOverPanel, đặt player.enabled = false.
  3. Trong Gem và Bomb, khi other.CompareTag("Player"), gọi game.AddScore(points) hoặc game.LoseLife(), rồi gọi Destroy(gameObject).

Nhấn Chơi và va vào ba quả bom. Sau đó, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public TMP_Text scoreText;
    public TMP_Text livesText;
    public GameObject gameOverPanel;
    public Player player;
    private int score;
    private int lives = 3;
    private bool gameOver;

    public void AddScore(int points)
    {
        // Cộng điểm và hiển thị điểm mới, trừ khi trò chơi đã kết thúc
    }

    public void LoseLife()
    {
        // Trừ một mạng và hiển thị số mạng còn lại; khi còn 0 mạng, trò chơi kết thúc
    }
}

Tất cả bài học trong Xây dựng trò chơi thực tế

Tự luyện tập: Playground Unity