在 Unity 中创建简单的游戏管理器

Unity 中的 游戏管理器 是一个中央脚本或系统,用于监督和控制游戏的核心机制和逻辑。它通常管理游戏状态(例如开始、暂停、结束)、玩家进度、分数、级别和全局设置。游戏管理器对于确保项目结构清晰并避免冗余代码至关重要。在本教程中,我们将创建一个基本的游戏管理器来处理游戏状态和分数跟踪。

步骤 1:设置场景

首先,准备一个简单的 Unity 场景:

  1. 创建一个新的 Unity 3D 项目。
  2. 添加基本​​关卡布局,例如用于地面的 Plane 和一些用于游戏元素的对象。
  3. 创建一个 UI Canvas 来显示分数等信息。

步骤2:创建游戏管理器脚本

游戏管理器将是一个单例,以确保它易于访问,并且整个游戏中只有一个实例存在。让我们编写脚本:

  1. 在项目面板中单击右键,然后选择 Create > C# Script。将其命名为 GameManager
  2. 在代码编辑器中打开脚本并将其内容替换为以下内容:
using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance; // Singleton instance

    public int score = 0; // Player's score
    public bool isGameActive = true; // Is the game running?

    void Awake()
    {
        // Ensure there is only one instance of GameManager
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject); // Persist across scenes
        }
        else
        {
            Destroy(gameObject); // Destroy duplicate instances
        }
    }

    // Method to increase the score
    public void AddScore(int points)
    {
        if (isGameActive)
        {
            score += points;
            Debug.Log("Score: " + score);
        }
    }

    // Method to end the game
    public void EndGame()
    {
        isGameActive = false;
        Debug.Log("Game Over!");
        // Additional logic to handle game over, like displaying UI
    }
}

步骤 3:将游戏管理器添加到场景

现在,让我们将游戏管理器添加到场景中:

  1. 在层次结构中创建一个空的游戏对象并将其命名为GameManager
  2. GameManager 脚本拖放到 GameObject 上。
  3. 确保场景中没有重复的 GameManager GameObjects。

步骤 4:更新游戏逻辑

让我们利用游戏管理器来处理玩家互动。例如,我们将修改游戏对象以与游戏管理器进行互动:

  1. 为玩家可以与之交互的对象创建一个名为 Target 的新脚本。
  2. 对目标脚本使用以下代码:
using UnityEngine;

public class Target : MonoBehaviour
{
    public int pointValue = 10; // Points awarded for interacting with this target

    void OnMouseDown()
    {
        if (GameManager.Instance.isGameActive)
        {
            // Add points to the score
            GameManager.Instance.AddScore(pointValue);

            // Destroy the target
            Destroy(gameObject);
        }
    }
}

此脚本假定玩家通过点击对象来与对象进行交互。您可以根据游戏机制(例如碰撞或触发器)调整此脚本。

步骤 5:显示分数

向玩家显示分数:

  1. 在 Canvas 中创建一个 Text UI 元素并将其命名为 ScoreText
  2. 创建一个名为ScoreUI的新脚本并将其附加到 Canvas。
  3. 使用以下代码更新分数显示:
using UnityEngine;
using UnityEngine.UI;

public class ScoreUI : MonoBehaviour
{
    public Text scoreText;

    void Update()
    {
        if (GameManager.Instance != null)
        {
            scoreText.text = "Score: " + GameManager.Instance.score;
        }
    }
}

将 ScoreText UI 元素拖到 Inspector 中的 ScoreText 字段中。

步骤6:测试游戏管理器

要测试你的游戏管理器:

  1. 运行场景并与使用目标脚本的对象进行交互。
  2. 当您与目标互动时,观察 UI 中分数的更新。
  3. 调用EndGame方法(例如,使用触发器或按钮)来测试结束游戏。

可选增强功能

您可以使用以下功能扩展游戏管理器的功能:

  • 关卡管理: 在游戏结束时加载新关卡或重置场景。
  • 游戏计时器: 添加倒计时器来挑战玩家。
  • 保存进度: 使用 PlayerPrefs 或保存系统存储和检索玩家进度。
  • 暂停菜单: 实现暂停菜单以停止游戏并显示选项。

结论

我们在 Unity 中创建了一个简单的游戏管理器来管理游戏状态和得分跟踪。游戏管理器集中了核心逻辑,使您的项目更有条理、更具可扩展性。尝试使用其他功能来定制游戏管理器以满足您的游戏需求。