Базовая система улучшений в 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 в сцене. Шаблон singleton обеспечивает легкий доступ из других скриптов, таких как 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. Создание пользовательского интерфейса для обновлений

Далее создайте элементы пользовательского интерфейса, чтобы игрок мог инициировать улучшения и отслеживать текущий уровень базы. Для этого:

  1. Создайте холст с кнопкой с надписью "Upgrade Base".
  2. Прикрепите событие OnClick к этой кнопке, связав его с методом AttemptUpgradeUpgradeManager.
  3. Отображайте уровень базы, ее здоровье и производительность в пользовательском интерфейсе, чтобы игроки могли отслеживать ход модернизации.

6. Тестирование системы обновления

Запустите игру и нажмите кнопку "Upgrade Base". С каждым обновлением атрибуты базы должны увеличиваться, а визуальные эффекты должны меняться соответственно. Используйте журнал отладки для проверки изменений валюты и корректировки уровня.

Расширение системы

Эту базовую систему улучшений можно расширить, добавив:

  • Новые уровни с уникальными атрибутами и визуальными улучшениями.
  • Потребности в ресурсах, выходящих за рамки валюты, такие как материалы или время.
  • Специальные эффекты для обновлений, такие как эффекты частиц или звуковая обратная связь.

Заключение

Мы создали базовую систему улучшений в Unity, включающую динамическое увеличение атрибутов, простую проверку валюты и пользовательский интерфейс для улучшений. Эта система обеспечивает основу для добавления более сложных механик в вашу игру, таких как многоэтапные улучшения и различные визуальные эффекты для каждого уровня.