【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)

本文主要是介绍【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

效果演示

在这里插入图片描述

文章目录

  • 效果演示
  • 系列目录
  • 前言
  • 存储加载物品信息
  • 源码
  • 完结

系列目录

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱等功能,我会附带项目源码,以便你更好理解它。

存储加载物品信息

新增SaveInventory,保存和加载物品数据

public class SaveInventory : Singleton<SaveInventory>
{[Header("保存加载")]public List<GameObject> allItemPrefabs = new List<GameObject>(); //物品预制体列表private string saveFileName = "inventorySave.json";//开始加载数据private void Start(){loadInventory();}//退出保存数据private void OnApplicationQuit(){saveInventory();}// 保存物品数据private void saveInventory(){List<Slot> allInventorySlots = Inventory.Instance.allInventorySlots;InventoryData data = new InventoryData();foreach (Slot slot in allInventorySlots) // 遍历所有插槽{Item item = slot.getItem(); // 获取插槽中的物品if (item != null){ItemData itemData = new ItemData(item.name, item.currentQuantity, allInventorySlots.IndexOf(slot)); // 创建物品数据data.slotData.Add(itemData); // 添加至插槽数据列表}}string jsonData = JsonUtility.ToJson(data); // 序列化为 JSON 格式File.WriteAllText(saveFileName, jsonData); // 将数据写入文件}// 加载物品数据public void loadInventory(){List<Slot> allInventorySlots = Inventory.Instance.allInventorySlots;if (File.Exists(saveFileName)){string jsonData = File.ReadAllText(saveFileName); // 从文件中读取数据InventoryData data = JsonUtility.FromJson<InventoryData>(jsonData); // 反序列化为 InventoryData 对象Inventory.Instance.clearInventory(); // 清空物品foreach (ItemData itemData in data.slotData) // 遍历插槽数据列表{GameObject itemPrefab = allItemPrefabs.Find(prefab => prefab.GetComponent<Item>().name == itemData.itemName); // 根据物品名称查找对应的预制体if (itemPrefab != null){GameObject createdItem = Instantiate(itemPrefab, Inventory.Instance.dropLocation.position, Quaternion.identity); // 在指定位置创建物品Item item = createdItem.GetComponent<Item>();item.currentQuantity = itemData.quantity; // 设置物品数量Inventory.Instance.addItemToInventory(item, itemData.slotIndex); // 将物品添加到相应插槽中}}}foreach (Slot slot in allInventorySlots) // 更新所有插槽的数据{slot.updateData();}}
}
[System.Serializable]
public class ItemData
{public string itemName; // 物品名称public int quantity; // 数量public int slotIndex; // 插槽索引public ItemData(string itemName, int quantity, int slotIndex){this.itemName = itemName;this.quantity = quantity;this.slotIndex = slotIndex;}
}[System.Serializable]
public class InventoryData
{public List<ItemData> slotData = new List<ItemData>(); // 插槽数据列表
}

修改Inventory

//将物品添加到背包中
public void addItemToInventory(Item itemToAdd, int overrideIndex = -1)
{//如果指定了覆盖索引,则将物品添加到指定的槽位中if(overrideIndex != -1 && overrideIndex < allInventorySlots.Count){allInventorySlots[overrideIndex].setItem(itemToAdd);itemToAdd.gameObject.SetActive(false);allInventorySlots[overrideIndex].updateData();return;}//。。。
}// 清空物品
public void clearInventory() 
{foreach (Slot slot in allInventorySlots){slot.setItem(null);}
}

注意:记得修改Inventory的Start方法为Awake或者OnEnable,确保Inventory初始化在SaveInventory的Start之前执行,不然会出错,对unity生命周期函数还不了解的小伙伴可以看我这篇文章:【2023Unity游戏开发教程】零基础带你从小白到超神05——脚本组件和生命周期函数

挂载配置参数
在这里插入图片描述
效果
先进入拾取物品,放在随机位置,退出游戏
在这里插入图片描述
查看保存的文件信息,在项目目录下
在这里插入图片描述
再次进入游戏,查看之前的物品被成功加载了
在这里插入图片描述

源码

源码不出意外的话我会放在最后一节

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

这篇关于【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714815

相关文章

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

springboot项目中整合高德地图的实践

《springboot项目中整合高德地图的实践》:本文主要介绍springboot项目中整合高德地图的实践,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一:高德开放平台的使用二:创建数据库(我是用的是mysql)三:Springboot所需的依赖(根据你的需求再

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热