在Unity中制作一个数据库存储数据作为背包系统(上)

在Unity中制作一个数据库存储数据作为背包系统(上)

1、利用ScriptableObject类

从这个视频学到的方法,感谢M_Studio

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;
        }
    }
}
   
原文地址:https://www.cnblogs.com/wei1349/p/12879474.html