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. レベルごとにビジュアルとエフェクトを更新する
各ベースアップグレードを視覚的に区別するには、異なるモデルやテクスチャなどのバリエーションをレベルごとに追加します。例:
- 基本レベルごとに複数の 3D モデルを作成したり、異なるテクスチャ/マテリアルを準備したりします。
- レベルが上がるたびにモデルまたはマテリアルを交換するには、
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 要素を作成します。これを行うには、次の手順を実行します。
- "Upgrade Base" というラベルの付いたボタンを含むキャンバスを作成します。
- このボタンに
OnClick
イベントを添付し、それをUpgradeManager
のAttemptUpgrade
メソッドにリンクします。 - 基地のレベル、健全性、生産率を UI に表示して、プレイヤーにアップグレードの進行状況に関するフィードバックを提供します。
6. アップグレードシステムのテスト
ゲームを実行し、"Upgrade Base" ボタンをクリックします。アップグレードするたびに、基地の属性が増加し、それに応じてビジュアルが変わります。デバッグ ログを使用して、通貨の変更とレベルの調整を確認します。
システムの拡張
この基本アップグレード システムは、以下を追加することで拡張できます。
- 独特の属性と視覚的な強化を備えた新しいレベル。
- 材料や時間など、通貨以外のリソース要件。
- パーティクル効果やサウンドフィードバックなどのアップグレード用の特殊効果。
結論
Unity では、動的な属性の増加、シンプルな通貨チェック、アップグレード用の UI を備えた基本アップグレード システムを作成しました。このシステムは、マルチステージ アップグレードやレベルごとに異なるビジュアルなど、より複雑なメカニズムをゲームに追加するための基盤を提供します。