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

 时间:2024-10-20 14:17:30

Unity UGUI背包系统(三) 之 实现物品存储到背包。本节介绍模拟物品拾取并存储到背包的过程的简单案例,具体如下

工具/原料

Unity

UGUI

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

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背包系统(三) 之 实现物品存储到背包》讲解结束,谢谢

  • 量价关系谁先谁后的理解
  • 2022元旦虎年剪纸教程
  • 苦瓜豆腐鸡汤
  • 热门搜索
    我的家庭手抄报 礼仪手抄报 科普知识的手抄报 五一英语手抄报 时代广场的蟋蟀手抄报 三年级数学手抄报内容 关于语言艺术的手抄报 为国家富强而奋斗的杰出人物手抄报 数学手抄报内容三年级 畅想未来手抄报