从零开始学背包系统02[Unity].数据库存储方法(ScriptableObject)

目前我了解到的ScriptableObject的作用应该是可以把数据真正存储在了资源文件中,可以像其他资源那样管理它,就算你退出了程序,里面的数据也不会归零之类的。

言简意赅的说,这玩意可以保存你修改过的数据。

下面让我来详细说明一下如何运用这东西:

首先,我们在uinty里面,可以先创建一个项目脚本,名字就叫Item吧,

第一步,把Item:后面的 MonoBehaviour改为ScriptableObject;

public class Item : MonoBehaviour
/*改为下面这段话哦*/
public class Item : ScriptableObject

顺带说一下如何让自己右键菜单能创建属于自己的东西,CreateAssetMenu这样:

[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/New Item")]
public class Item : ScriptableObject

在public上面加一串这种代码,

emmm,fileName是创建后项目的名字,menuName的意思是它在菜单里的名字,

后面那个  “Inventoty/New Item”  为   文件夹名字/子菜单名字,效果是这样的:

 (New Inventory是以后创建的东西,不用管他);

然后就可以在代码里添加item的元素啦,比如:

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;   //道具是否能被装备
}

[TextArea]这个东西是将介绍从一行变成一大段,万一你捡到神器了怎么办?一行话怎能描写出神器的威能?

接下来终于可以创建自己的背包了myBag;

背包用的也是 ScriptableObject(笑死,不是的话游戏下线了自己啥装备也没了);

来一串代码:

[CreateAssetMenu(fileName = "New Inventory", menuName ="Inventory/New Inventory")]
public class Inventory : ScriptableObject
{
    public List<Item> itemList = new List<Item>();
}

上面哪个叫New Inventory的不就出现了吗?

List</*类型*/>,背包就创建好了.

接下来回到unity里面创建一把剑,记得 collider里面要划上is trigger

再给这把剑创建一个脚本(大部分道具都需要的)

public class ItemOnWorld : MonoBehaviour
{
    public Item thisItem;
    public Inventory playInventory;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if(other.gameObject.CompareTag("Player"))
        {
            AddNewItem();
            Destroy(gameObject);
        }
    }

    public void AddNewItem()
    {
        if(!playInventory.itemList.Contains(thisItem))
        {
            playInventory.itemList.Add(thisItem);
            //Inventorymanager.CreatNewItem(thisItem);
        }
        else 
        {
            thisItem.itemHeld += 1;
        }
        Inventorymanager.RefreshItem();
    }
}

 先理解一下,public了两个东西,一个是自己的所有元素,另一个是背包,下面那串代码是被角色碰到后添加道具和摧毁自身,AddNewItem里面

如果你有该道具,那么就数值加1,否则就添加道具!

然后再游戏里面试验的话发现持有度确实增加了,哪怕停止运行后再次运行持有数量依旧保留了,是不是很nice呢?

那些没有涉及到的方法,特指Inventorymanager,这个下次再总结(因为我也不大会);

谢谢观看

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值