zoukankan      html  css  js  c++  java
  • 在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;
            }
        }
    }
       
  • 相关阅读:
    苹果开发者账号多少钱?个人/公司/企业申请费用及怎么选【都有】
    uniapp ios真机调试【亲测有效】
    Uniapp---IOS打包证书私钥密码怎么获取?
    微信小程序地图计算两个点之间的距离
    各大地理坐标系互转
    解决mac下vscode等应用中vim光标无法快速移动
    python 脚本如何在后代运行并记录标准输出
    wkhtmltox 在Linux上安装
    shell中的##*,%%*问题
    matplotlib、seaborn 展示中文字体
  • 原文地址:https://www.cnblogs.com/wei1349/p/12879474.html
Copyright © 2011-2022 走看看