在Unity中制作一個數據庫存儲數據作為背包系統(上)
1、利用ScriptableObject類
ScriptableObject類允許開發者不用將腳本作為組件加載在物品上也能調用,而且還可以用來存儲數據。
第一步,存儲物品的數據
首先新建一個類用來作為存儲物品數據的基類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="New Item",menuName = "Inventory/New Item")]
public class Item : ScriptableObject
{
public string itemname;//道具的名字
public Sprite itemimage;//道具的圖片
public int itemHeld;//道具數量
//文本區域
[TextArea]
public string iteminfo;//道具的信息
public bool equip; //是否可以被裝備
}
然后就可以在項目的創建菜單中,找到Inventory,里面就會出現New Item,點擊並創建。
通過這一途徑會新建一個繼承了Item的Assets,繼承了Item里面的數據成員。
第二步,管理物品
通過同樣的方法,新建一個類用來作為物品列表的基類
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName ="New Inventory",menuName ="Inventory/New Inventory")]
public class Inventory : ScriptableObject
{
public List<Item> itemlist = new List<Item>();//物品列表
}
同樣的方法,建立一個Assert來作為管理物品的列表
第三步,通過點擊新增新的物品
我這里設定為,當鼠標點擊某一物品,在該物品的ItemHeld上加1,若物品數量為零,則列表中新增一個。
首先,給被點擊的物品加上一個collider組件,IsTriger可勾可不勾,主要時用來接收鼠標的點擊。然后掛上腳本。
腳本代碼如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemOnWorld : MonoBehaviour
{
public Item ThisItem;
public Inventory PlayInventory;
private void Start()
{
ThisItem.itemHeld = 0;//重新加載游戲時清零
}
private void OnMouseDown()//當被鼠標點擊時
{
Debug.Log("3");
AddNewItem();
//Destroy(gameObject);
}
public void AddNewItem()//在列表中加入這個物品
{
if (!PlayInventory.itemlist.Contains(ThisItem))
{
PlayInventory.itemlist.Add(ThisItem);
}
else
{
ThisItem.itemHeld = ThisItem.itemHeld + 1;
}
}
}