Unity 中的基础升级系统

在许多游戏中,玩家可以升级基地或建筑以解锁更多功能、提高防御力或提高生产率。本教程将指导您在 Unity 中设置基地升级系统,允许将建筑升级到多个级别,并且每个级别的视觉和功能都会发生变化。

1. 设置基础结构

首先,创建一个 Base 脚本,定义基地的属性,例如其等级、健康状况和生产率。每次升级都会修改这些属性。

using UnityEngine;

public class Base : MonoBehaviour
{
    public int level = 1;
    public int health = 100;
    public int productionRate = 10;

    public void UpgradeBase()
    {
        level++;
        health += 50; // Increase health by 50 with each level
        productionRate += 5; // Increase production rate by 5 with each level
        Debug.Log("Base upgraded to level " + level);
    }
}

Base 脚本包含一个简单的 UpgradeBase() 方法,该方法可增加级别并升级基础的属性。将此脚本附加到场景中的基础 GameObject。

2. 创建升级管理器

接下来,创建一个 UpgradeManager 脚本来管理基础升级,包括检查玩家是否有足够的货币来升级。

using UnityEngine;

public class UpgradeManager : MonoBehaviour
{
    public Base playerBase;
    public int upgradeCost = 100;

    public void AttemptUpgrade()
    {
        if (CurrencySystem.Instance.SpendCurrency(upgradeCost))
        {
            playerBase.UpgradeBase();
            upgradeCost += 50; // Increase the cost for each upgrade
        }
        else
        {
            Debug.Log("Not enough currency to upgrade.");
        }
    }
}

将此 UpgradeManager 脚本附加到 GameObject,将基础 GameObject 分配给其 playerBase 字段,并设置初始 upgradeCost。每次升级都会增加成本,使未来的升级更具挑战性。

3. 建立货币体系

要管理升级成本,请添加 CurrencySystem 作为跟踪和花费玩家货币的简单方法。以下是示例:

using UnityEngine;

public class CurrencySystem : MonoBehaviour
{
    public static CurrencySystem Instance;
    public int currency = 500;

    private void Awake()
    {
        if (Instance == null)
            Instance = this;
        else
            Destroy(gameObject);
    }

    public bool SpendCurrency(int amount)
    {
        if (currency >= amount)
        {
            currency -= amount;
            Debug.Log("Currency spent: " + amount + ". Remaining: " + currency);
            return true;
        }
        else
        {
            Debug.Log("Not enough currency.");
            return false;
        }
    }

    public void AddCurrency(int amount)
    {
        currency += amount;
        Debug.Log("Currency added: " + amount + ". Total: " + currency);
    }
}

将此 CurrencySystem 附加到场景中的 GameObject。单例模式允许从其他脚本(例如 UpgradeManager)轻松访问。

4. 更新每个级别的视觉效果和效果

为了使每个基础升级在视觉上都独一无二,请为每个级别添加变化,例如不同的模型或纹理。例如:

  1. 为每个基础级别创建多个 3D 模型,或准备不同的纹理/材质。
  2. Base 类中添加代码,以便在每次级别增加时交换模型或材料。

以下是用于更新 Base 脚本中的视觉效果的代码片段:

public GameObject[] levelModels; // Assign each level's model in Inspector

public void UpgradeBase()
{
    level++;
    health += 50;
    productionRate += 5;
    UpdateBaseModel();
}

void UpdateBaseModel()
{
    for (int i = 0; i < levelModels.Length; i++)
    {
        levelModels[i].SetActive(i == level - 1);
    }
}

此代码将激活与基地当前级别相匹配的模型并停用其他模型。

5. 创建升级 UI

接下来,创建 UI 元素,让玩家可以启动升级并跟踪基地的当前等级。具体操作如下:

  1. 创建一个带有标有 "Upgrade Base" 的按钮的画布。
  2. OnClick 事件附加到此按钮,并将其链接到 UpgradeManagerAttemptUpgrade 方法。
  3. 在 UI 上显示基地的等级、健康状况和生产率,以便让玩家反馈升级进度。

6. 测试升级系统

运行游戏并单击 "Upgrade Base" 按钮。每次升级后,基地的属性都会增加,视觉效果也会相应改变。使用调试日志验证货币变化和级别调整。

扩展系统

此基础升级系统可通过添加以下内容进行扩展:

  • 具有独特属性和视觉增强功能的新关卡。
  • 货币以外的资源需求,例如材料或时间。
  • 升级的特殊效果,例如粒子效果或声音反馈。

结论

我们在 Unity 中创建了一个基础升级系统,该系统具有动态属性增加、简单的货币检查和升级 UI。该系统为在游戏中添加更复杂的机制奠定了基础,例如多阶段升级和每个级别的独特视觉效果。