これからアイテムスロットを作成していくのですが、作成するゲーム規模(アイテム3個程度)に見合わない複雑な手法を取ってますので、別でコンパクトverも紹介しようかと思ってます。
アイテムデータのアセット化
大量のアイテムデータ(このゲームでは3つですが)をシーンを移動しても管理しやすくするため、プロジェクトウィンドウにデータをアセットとして保存できるようにします。まずは以下スクリプトを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[Serializable]
[CreateAssetMenu(fileName = "Item", menuName = "CreateItem")]//ネーム変更可
public class Item : ScriptableObject
{
[SerializeField]private Sprite icon;//アイテムのアイコン
[SerializeField]private string itemName;//アイテムの名前
[SerializeField]private string information;//アイテムの情報
public Sprite GetIcon()
{
return icon;
}
public string GetItemName()
{
return itemName;
}
public string GetInformation()
{
return information;
}
}
これまではMonoBehaviourクラスでしたが、ここではScriptableObject
クラスを継承しています。詳しくは以下の通りなのですが、難しいので”オブジェクトには付けられないアセット管理専用クラス”と理解しています。
メニューバーのAssets>Create>CreateItemを選択すると、Itemでデータアセットが作成されます。
このゲームでは既にKnifeが登場してますので、Item→Knifeに名前変更。アイテムスロットに表示する用のSpriteも用意しておきましょう。
inspector上では個々のアイテム情報を用途に合わせて入力・設定します。仮にコンビニとかだとしたら、商品のバーコードのようなイメージですかね。
アイテムデータベースの作成
上記の要領でKnifeの他にKeyとGunも作成し、合計3つになりました。ただこれらはあくまでアイテムの1つでしかない為、一元管理が必要となります。
アイテムデータベースを作成しましょう。先程同様ScriptableObjectクラスの継承でスクリプトを作成します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "ItemDataBase", menuName = "CreateItemDataBase")]//ネーム変更可
public class ItemDataBase : ScriptableObject
{
[SerializeField]private List<Item> itemLists = new List<Item>();
public List<Item> GetItemLists()
{
return itemLists;
}
}
先程と同じやり方でAssets>Create>CreateItemDataBaseを選択すると、ItemDataBaseでデータアセットが作成されます。
今度はリストをアセット化した事になります。3つ作成したアイテムアセットを割り当ててアイテムデータベースまで完成です。コンビニでいう在庫管理表みたいなものでしょうか。
次回よりこれらを活用していきます。
コメント