(Unity6 BRP)アイテムを管理する(ScriptableObjectの活用)

(アイテムステータス)

・新規にC#スクリプトの作成

・名前を「ItemStatus」に変更

・下記のコードを書いてチェック

using UnityEngine;
// ★追加
using System;

// ★追加
[Serializable]
public class ItemStatus
{
    public string itemName;
    public Sprite itemIcon;
    public int itemPrice;
}

(アイテムデータベース)

・新規に「ScriptableObject Script」を作成

・名前を「ItemDatabase」に変更

・下記のコードを書いてチェック

using UnityEngine;
using System.Collections.Generic;

[CreateAssetMenu(fileName = "ItemDatabase", menuName = "Scriptable Objects/ItemDatabase")]
public class ItemDatabase : ScriptableObject
{
    public List<ItemStatus> itemList;
}

(設定)

・「Create」→「Scriptable Object」→「ItemDatabase」をクリック

・「ItemDatabase」を選択した状態で「+」をクリック

・「ItemName」「ItemIcon」「ItemPrice」を必要な数だけ設定


(アイテムのステータスを表示するUIの作成)


(サンプルコード)

using UnityEngine;
// ★追加
using TMPro;
using UnityEngine.UI;

public class ItemManager : MonoBehaviour
{
    public ItemDatabase itemData;

    public Image itemImage;
    public TextMeshProUGUI itemNameLabel;
    public TextMeshProUGUI itemPriceLabel;

    private int num = 0;

    void Start()
    {
        itemImage.sprite = itemData.itemList[num].itemIcon;
        itemNameLabel.text = itemData.itemList[num].itemName;
        itemPriceLabel.text = itemData.itemList[num].itemPrice.ToString();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            num = (num + 1) % itemData.itemList.Count;

            itemImage.sprite = itemData.itemList[num].itemIcon;
            itemNameLabel.text = itemData.itemList[num].itemName;
            itemPriceLabel.text = itemData.itemList[num].itemPrice.ToString();
        }
    }
}

(設定)

・新規に「Create Empty」オブジェクトを作成

・名前を「ItemManager」に変更

・このオブジェクトに「ItemManager」スクリプトを追加

・空欄に該当の「Databese」と「UI」を追加

・設定が完了したらゲームを再生

・スペースキーを押すたびに、アイテムが切り替われば成功です。