Menu
CoddyTech

復習:アイテムデータベース

CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 23/50。

challenge icon

チャレンジ

中級

鍛冶屋の店は、ゲーム内のすべての店で共有されるアイテムデータベースから商品を販売します。2種類のアセットとShopを書きましょう。

  • ItemData(ItemData.cs内):Createメニュー項目と、itemName(string型)およびprice(int型)のpublicフィールドを持つScriptableObject。
  • ItemDatabase(ItemDatabase.cs内):Createメニュー項目と、1つのpublicフィールドitems(ItemDataのリスト)を持つScriptableObject。
  • Shopには、ItemDatabase型のpublicフィールドdatabaseを用意します。itemTextには、最初のアイテムから選択中のアイテムをIron Sword: 30 goldのように表示し、goldTextには所持金をGold: 50のように表示します。
  • 右矢印キーで次のアイテムを選択し、最後のアイテムの次は最初のアイテムに戻ります。左矢印キーでは逆方向に移動し、最初のアイテムから最後のアイテムに移ります。
  • スペースキーで選択中のアイテムを購入します。プレイヤーがすでに購入したアイテムの場合、Already owned: Iron Swordをログに出力します。所持金より高価なアイテムの場合は、Not enough gold for Iron Swordをログに出力します。それ以外の場合は、価格分だけ所持金が減り、そのアイテムを所持済みにして、テキストを更新し、ConsoleにBought Iron Swordと表示します。
  • 購入したものはShop内に保持します。アセットはそのままにします。データベースは共有され、Editorでアセットに加えた変更はPlayモード終了後も残ります。

プロジェクトには4つのItemDataアセット(Iron Sword 30、Oak Shield 20、Healing Potion 10、Long Bow 45)、この順番で登録されたDatabaseアセットがあり、InspectorでShopのdatabaseフィールドにDatabaseを設定します。Playを押して買い物をし、それからCheckを押してください。

自分で試してみよう

using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;

public class Shop : MonoBehaviour
{
    public TMP_Text itemText;
    public TMP_Text goldText;
    public int gold = 50;

    // データベースのフィールド、矢印キーでの閲覧、Spaceでの購入処理はここに記述する
}

Unityにおけるゲームアーキテクチャのすべてのレッスン