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 を備えた基本アップグレード システムを作成しました。このシステムは、マルチステージ アップグレードやレベルごとに異なるビジュアルなど、より複雑なメカニズムをゲームに追加するための基盤を提供します。