• 在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;
            }
        }
    }
       
  • 相关阅读:
    python 读取配置文件总是报错 configparser.NoSectionError: No section:
    接口测试面试题(转载)
    pytest文档1--简介及用例规则
    引以为戒,配置ChromeDriver 报错 'module' object is not callable
    截图+存储图片
    UI自动化(selenium+python)之浏览器驱动chromedriver安装和配置
    requests---requests封装请求类型
    工具学习_MarkDown
    python并发编程-多进程与多协程
    python并发编程-多线程同步异步处理
  • 原文地址:https://www.cnblogs.com/wei1349/p/12879474.html
Copyright © 2020-2023  润新知