復習:アイテムデータベース
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 23/50。
チャレンジ
中級鍛冶屋の店は、ゲーム内のすべての店で共有されるアイテムデータベースから商品を販売します。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での購入処理はここに記述する
}