#アイテム管理どうするの?
Unityに関わらずRPGやFPSなどのゲームを制作する時の悩み所、アイテム管理。
ここで悩むのは自分のプログラム力が低いだけだと思いますが。
インベントリや装備、アイテムドロップなどですべてがアクセスするデータベースなどの作り方をここを参考にした奴を紹介していきます。
アイテムの基本構成
アイテムネーム
アイテムのID
アイテムの説明文
ゲーム内で表示されるアイテムアイコン
攻撃力
防御力
アタックスピード
特殊効果
属性のタイプ
アイテムのタイプ
細かく考えるときりがないのでこんな感じでしょうか。
##アイテムの要素を丸ごとリスト化
using UnityEngine;
using System.Collections;
[System.Serializable]//この属性を使ってインスペクター上で表示
public class Item
{
public string itemName; //名前
public int itemID; //アイテムID
public string itemDesc; //アイテムの説明文
public Texture2D itemIcon; //アイコン
public int itemPower; //攻撃力
public int itemDefense; //防御力
public int itemAttackSpeed; //攻撃速度
public int itemLifeSteal; //ライフスティール(特殊効果)
public ElementType elemenType; //属性
public ItemType itemType; //アイテムの種類
//属性はまた別にenumにて切り替えれるようにします
public enum ElementType
{
Non,
Fire,
Ice,
Lightning,
}
//アイテムタイプも同じくenum
public enum ItemType
{
Weapon,
Consumable,
Quest
}
//ここでリスト化時に渡す引数をあてがいます
public Item(string name, int id, string desc, int power,int def, int speed,int ls, ElementType etype, ItemType type)
{
itemName = name;
itemID = id;
//アイコンはnameとイコールにするのでアイコンがあるパス+nameで取ってきます
itemIcon = Resources.Load<Texture2D>("Item Icons/" + name);
itemDesc = desc;
itemPower = power;
itemDefense = def;
itemAttackSpeed = speed;
itemLifeSteal = ls;
elemenType = etype;
itemType = type;
}
}
次にこのアイテムの基礎を渡すアイテムデータベースを作ります。
###アイテムの基本構成を受け取るアイテムデータベース
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class ItemDataBase : MonoBehaviour
{
//リスト化をして下のvoid Start内でリストに値を追加、値は適当です
public List<Item> items = new List<Item>();
void Start()
{
items.Add(new Item("Hogehoge",0,"hogehogehogehoge",2,1,0,0,Item.ElementType.Non,Item.ItemType.Weapon));
}
}
ヒエラルキーに空のオブジェクトを追加し、名前を
ItemDataBaseにします。
そのオブジェクトにItemDataBase.csをアタッチします。
ItemsのSizeはゲームがスタートしないと
追加されないので初期値は0です。
スタートボタンを押すとこんな感じになります
こんな感じでアイテムを追加していき
別のスクリプトで
private ItemDataBase database;
参照して
こんな感じで値をとってくる。
かなりざっくりしていて見にくいと思いますが、色々初心者なので
時間がある時にきれいにまとめていきたいと思います。
冒頭で紹介したインベントリの作る動画ではこれを基礎にインベントリでの
アイテムをオンマウスで情報のポップアップなど色々と勉強出来てお勧めです。