【unity】3D脱出ゲーム作成_その8

3D脱出ゲーム

これからアイテムスロットを作成していくのですが、作成するゲーム規模(アイテム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クラスを継承しています。詳しくは以下の通りなのですが、難しいので”オブジェクトには付けられないアセット管理専用クラス”と理解しています。

Icon_アイテムスロット用
ItemName_取得するアイテムの判別用
Infomation_スロットに追加された後の情報表示用

メニューバーの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;
	}
}
アイテムが増えてもItemListsの数字を増やせばいい

先程と同じやり方でAssets>Create>CreateItemDataBaseを選択すると、ItemDataBaseでデータアセットが作成されます。

今度はリストをアセット化した事になります。3つ作成したアイテムアセットを割り当ててアイテムデータベースまで完成です。コンビニでいう在庫管理表みたいなものでしょうか。

次回よりこれらを活用していきます。

コメント

タイトルとURLをコピーしました