Unity UGUI背包系统(三) 之 实现物品存储到背包

2025-10-05 10:55:26

1、把UI“GridPanel”下子物体“GridImage”全部赋值给脚本“GridPanel”的“Grids”,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

2、删除场景中的“ItemImage”,给预制体“ItemImage”下的“IitemText”赋值给预制体“ItemImage”上的脚本“ItemImage”的“itemText”,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

3、在文件夹“Scripts”下新建一个脚本“KnapsackManager”,然后双击脚本或者右键“Open C# Project”打开脚本,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

4、在打开的“KnapsackManager”脚本上编写代码,首先设置变量获取“GridPanel”脚本,设置字典存储物品信息,并实现脚本单例化,然后实现存储物品的接口函数,函数中包含判断物品是否是字典里面的物品,判断背包是否满了,最后把物品生成到背包里,接着实现模拟数据库加载数据,被物品信息存到字典中,具体代码和代码说明如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

Unity UGUI背包系统(三) 之 实现物品存储到背包

Unity UGUI背包系统(三) 之 实现物品存储到背包

5、“KnapsackManager”脚本的具体内容如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class KnapsackManager : MonoBehaviour {

    public GridPanel gridPanel;

    private Dictionary<int, Item> itemList;

    private static KnapsackManager instance;

    public static KnapsackManager Instance {

        get {

            return instance;          

        }

    }

    void Awake() {

        instance = this;

        this.LoadData();

    }

    public void StoreItem(int itemId) {

        if (!itemList.ContainsKey(itemId)) {

            return;

        }

        Transform emptyGrid = gridPanel.GetEmptyGrid();

        if (emptyGrid == null) {

            Debug.Log("背包已满");

            return;

        }

        Item item = itemList[itemId];

        GameObject itemPrefab = Resources.Load<GameObject>("Prefabs/ItemImage");

        itemPrefab.GetComponent<ItemImage>().UpdateItem(item.Name);

        GameObject itemGo = GameObject.Instantiate(itemPrefab);

        itemGo.transform.SetParent(emptyGrid);

        itemGo.transform.localPosition = Vector3.zero;

        itemGo.transform.localScale = Vector3.one;

    }

    //模拟数据库数据加载

    private void LoadData() {

        itemList = new Dictionary<int, Item>();

        Weapon w1 = new Weapon(0, "牛刀", "牛B的刀", 20, 10, "", 100);

        Weapon w2 = new Weapon(1, "羊刀", "杀羊刀。", 15, 10, "", 20);

        Weapon w3 = new Weapon(2, "宝剑", "大宝剑!", 120, 50, "", 500);

        Weapon w4 = new Weapon(3, "军枪", "可以对敌人射击,很厉害的一把枪。", 1500, 125, "", 720);

        Consumable c1 = new Consumable(4, "红瓶", "加血", 25, 11, "", 20, 0);

        Consumable c2 = new Consumable(5, "蓝瓶", "加蓝", 39, 19, "", 0, 20);

        Armor a1 = new Armor(6, "头盔", "保护脑袋!", 128, 83, "", 5, 40, 1);

        Armor a2 = new Armor(7, "护肩", "上古护肩,锈迹斑斑。", 1000, 0, "", 15, 40, 11);

        Armor a3 = new Armor(8, "胸甲", "皇上御赐胸甲。", 153, 0, "", 25, 30, 11);

        Armor a4 = new Armor(9, "护腿", "预防风寒,从腿做起", 999, 60, "", 19, 30, 51);

        itemList.Add(w1.Id, w1);

        itemList.Add(w2.Id, w2);

        itemList.Add(w3.Id, w3);

        itemList.Add(w4.Id, w4);

        itemList.Add(c1.Id, c1);

        itemList.Add(c2.Id, c2);

        itemList.Add(a1.Id, a1);

        itemList.Add(a2.Id, a2);

        itemList.Add(a3.Id, a3);

        itemList.Add(a4.Id, a4);

    }

}

6、脚本编译正确,回到Unity界面,把脚本拖到UI“KnapsackUI”上,并把UI“GridPanel”赋值给脚本的“Grid Panel”变量,由于使用“Resources.Load”加载预制体,所以记得把预制体放在新建的“Resources”文件夹下,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

Unity UGUI背包系统(三) 之 实现物品存储到背包

7、在“Scripts”文件夹下新建脚本“InputDetector”模拟物品拾取,双击脚本或者右键“Open C# Project”,打开脚本,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

8、在打开的“InputDetector”脚本上编辑代码,在Update函数下按下“鼠标中键”模拟物体随机拾取,具体的代码及代码说明如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

9、“InputDetector”脚本的具体内容如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class ItemImage : MonoBehaviour {

    public Text itemText;

    //本节以字体为例

    public void UpdateItem(string name) {

        itemText.text = name;

    }

    //实际多是图片,可以使用这个更新图片

    [HideInInspector]

    public Image itemImage;

    public void UpdateItemImage(Sprite icon)

    {

        itemImage.sprite = icon;

    }

}

10、脚本编译正确,回到Unity界面,把脚本拖给主摄像机“MainCamera”,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

11、运行场景,按下鼠标中键,即可看到游戏视图中,背包添加了物品,连续按下中间,但满了的时候,控制台Console提示背包已满信息,具体如下图

Unity UGUI背包系统(三) 之 实现物品存储到背包

12、到此,《Unity UGUI背包系统(三) 之 实现物品存储到背包》讲解结束,谢谢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢