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

news2025/3/11 11:10:23

效果演示

在这里插入图片描述

文章目录

  • 效果演示
  • 系列目录
  • 前言
  • 物品堆叠
  • 源码
  • 完结

系列目录

前言

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

物品堆叠

修改Inventory

// 放下正在拖拽的背包图标
    private void dropInventoryIcon()
    {
        // 重置我们的拖拽物品变量
        dragIconImage.sprite = null;
        dragIconImage.color = new Color(1, 1, 1, 0); // 使图标不可见

        for (int i = 0; i < allInventorySlots.Count; i++)
        {
            Slot curSlot = allInventorySlots[i]; // 获取当前遍历到的槽位
            if (curSlot.hovered) // 如果鼠标悬停在当前槽位上
            {
                if (curSlot.hasItem()) // 如果该槽位已经有物品
                {
                    Item itemToSwap = curSlot.getItem(); // 获取该槽位的物品

                    //如果两个物品相同,且可堆叠
                    if (itemToSwap.name == currentDraggedItem.name && itemToSwap.currentQuantity != itemToSwap.maxQuantity)
                    {
                        int leftoverQuantity = currentDraggedItem.currentQuantity;//当前拖拽物品数量
                        int freeSpaceInSlot = itemToSwap.maxQuantity - itemToSwap.currentQuantity;//目标物品差多少满堆叠
                        if (freeSpaceInSlot >= leftoverQuantity)
                        {
                            itemToSwap.currentQuantity += leftoverQuantity;
                            Destroy(currentDraggedItem);
                            allInventorySlots[currentDragSlotIndex].setItem(null);
                            allInventorySlots[i].updateData();
                            resetDragVariables();
                            return;
                        }
                        else
                        {
                            itemToSwap.currentQuantity = itemToSwap.maxQuantity;//设置目标物品为最大堆叠
                            allInventorySlots[i].updateData();
                            currentDraggedItem.currentQuantity = currentDraggedItem.currentQuantity - freeSpaceInSlot;
                            allInventorySlots[currentDragSlotIndex].setItem(currentDraggedItem);
                            resetDragVariables();
                            return;
                        }
                    }
                    else
                    {
                        //交互物品
                        curSlot.setItem(currentDraggedItem); // 将拖拽的物品放入当前槽位
                        allInventorySlots[currentDragSlotIndex].setItem(itemToSwap); // 将被交换的物品放回原来的拖拽槽位
                        resetDragVariables(); // 重置拖拽相关的变量
                        return;
                    }
                }
                else // 如果槽位为空,则直接放置物品
                {
                    curSlot.setItem(currentDraggedItem);
                    resetDragVariables(); // 重置拖拽相关的变量
                    return;
                }
            }
        }
        // 如果没有悬停在任何槽位上(即放置位置无效),则将物品放回原来的槽位
        allInventorySlots[currentDragSlotIndex].setItem(currentDraggedItem);
        resetDragVariables();
    }

效果
在这里插入图片描述

源码

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

完结

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

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1453887.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JoySSL免费可续签通配符证书:中小企业网站安全的理想选择

在数字时代&#xff0c;网络安全已成为企业和个人用户不可忽视的重要议题。其中&#xff0c;SSL证书作为保障网站数据传输加密和身份验证的关键工具&#xff0c;对于维护网站的安全性和可信度至关重要。然而&#xff0c;对于许多中小企业来说&#xff0c;高昂的SSL证书费用常常…

网络原理(UDP与TCP篇)

网络原理 协议应用层现成的自定义协议格式运输层端口号UDP协议首部格式TCP报文段的首部格式首部格式源端口号 和 目的端口号序号确认号ack 和 ACK数据偏移&#xff08;**首部长度**&#xff09;保留窗口校验和SYNFINRSTPSHURG 和 紧急指针扩展首部填充 TCP的可靠传输TCP的超时重…

函数、极限、连续——刷题(7

目录 1.题目&#xff1a;2.解题思路和步骤&#xff1a;3.总结&#xff1a;小结&#xff1a; 1.题目&#xff1a; 2.解题思路和步骤&#xff1a; 记住和差化积、积化和差公式即可&#xff1a; 然后就可以化简&#xff1a; 3.总结&#xff1a; 记住和差化积、积化和差公式即可…

Ps:污点修复画笔工具

污点修复画笔工具 Spot Healing Brush Tool专门用于快速清除图像中的小瑕疵、污点、尘埃或其他不想要的小元素。 它通过分析被修复区域周围的内容&#xff0c;无需手动取样&#xff0c;自动选择最佳的修复区域来覆盖和融合这些不完美之处&#xff0c;从而实现无痕修复的效果。 …

7.1 Qt 中输入行与按钮

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 参考&#xff1a; 前言&#xff1a; line edit 与pushbotton的一点联动 当输入行有内容时&#xff0c;按钮才能使用&#xff0c;并能读出输入行的内容 技能&#xff1a; pushButton->setEnabled(false) 按钮不…

代码随想录 Leetcode56. 合并区间

题目&#xff1a; 代码(首刷自解 2024年2月18日&#xff09;&#xff1a; 这题与气球扎针&#xff0c;删除重复的大体逻辑相似。需要额外定义些变量来存储头尾 class Solution { private:const static bool cmp(vector<int>& a, vector<int>& b) {return …

解决:docker创建Redis容器成功,但无法启动Redis容器、也无报错提示

解决&#xff1a;docker创建Redis容器成功&#xff0c;但无法启动Redis容器、也无报错提示 一问题描述&#xff1a;1.docker若是直接简单使用run命令&#xff0c;但不挂载容器数据卷等参数&#xff0c;则可以启动Redis容器2.docker复杂使用run命令&#xff0c;使用指定redis.co…

数据库管理-第151期 Oracle Vector DB AI-03(20240218)

数据库管理151期 2024-02-18 数据库管理-第151期 Oracle Vector DB & AI-03&#xff08;20240218&#xff09;1 向量数据库应用场景2 Oracle Vector DB3 Vector数据类型4 Vector运算5 Vector DML插入向量获取向量 总结 数据库管理-第151期 Oracle Vector DB & AI-03&am…

【深度学习:图像注释工具】用于计算机视觉的最佳图像注释工具 [2024 年更新]

【深度学习&#xff1a;图像注释工具】用于计算机视觉的最佳图像注释工具 [2024 年更新&#xff3d; 评估计算机视觉项目的图像注释工具11 个最流行的图像注释工具Encord主要特征最适合 Scale主要特点最适合价钱CVAT主要特征最适合价钱 LabelboxKey Features 主要特征最适合价钱…

前端面试必备八股文——HTMLCSS

HTML src和href的区别 src和href都是用来加载外部资源&#xff0c;区别如下 src当浏览器解析到该元素时&#xff0c;会暂停其他资源的加载和处理&#xff0c;直到该资源加载完成。 它会将资源内容嵌入到当前标签所在的位置&#xff0c;将其指向的资源下载应用到文档内&#…

GIS工具maptalks——初始化

GIS工具maptalks开发手册(一)——hello world初始化 为何使用maptalks&#xff1f; ​ Maptalks项目是一个HTML5的地图引擎, 基于原生ES6、Javascript开发的二三维一体化地图。 通过二维地图的旋转、倾斜增加三维视角&#xff0c;通过插件化设计, 能与其他图形库echarts、d3.j…

数学建模【非线性规划】

一、非线性规划简介 通过分析问题判断是用线性规划还是非线性规划 线性规划&#xff1a;模型中所有的变量都是一次方非线性规划&#xff1a;模型中至少一个变量是非线性 非线性规划在形式上与线性规划非常类似&#xff0c;但在数学上求解却困难很多 线性规划有通用的求解准…

防火墙 iptables(二)--------------SNAT与DNAT

一、SNAT ①SNAT 应用环境: 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) ②SNAT原理: 源地址转换&#xff0c;根据指定条件修改数据包的源IP地址&#xff0c;通常被叫做源映射 数据包从内网发送到公网时&#xff0c;SNAT会把数据包的源IP由…

两种方法判断Python的位数是32位还是64位

Python从1991年发布以来&#xff0c;凭借其简洁、清晰、易读的语法、丰富的标准库和第三方工具&#xff0c;在Web开发、自动化测试、人工智能、图形识别、机器学习等领域发展迅猛。     Python是一种胶水语言&#xff0c;通过Cython库与C/C语言进行链接&#xff0c;通过Jytho…

C++面向对象程序设计-北京大学-郭炜【课程笔记(三)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;三&#xff09;】 1、构造函数&#xff08;constructor&#xff09;1.1、基本概念 2、赋值构造函数2.1、基本概念2.1、复制构造函数起作用的三种情况2.2、常引用参数的使用 3、类型转换构造函数3.1、什么事类型转换构造函…

LiveGBS流媒体平台GB/T28181功能-redis订阅国标设备状态redis订阅通道状态subscribe device操作及示例

支持Redis订阅国标设备状态及国标通道状态上线离线 1、设备状态监听的烦恼2、device订阅2.1、设备上线消息2.2、设备离线消息2.2、通道上线消息2.2、通道离线消息 3、订阅示例3.1、连接REDIS3.2、订阅device示例3.3、设备上线示例3.3.1、注册上线后 3.4、设备离线示例3.4.1、注…

力扣OJ题——旋转数组

题目&#xff1a;189.旋转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数 思路一&#xff1a; 1.每次挪动旋转1位&#xff08;用tmp将最后一位存起来&#xff0c;其余所有数据向后移&#xff0c;然后将tmp放在第一个位…

什么是VDA 4902?

VDA 4902为条码运输标签&#xff0c;主要为企业制作条码运输标签提供参考和标准。 运输标签唯一标识内部物料流以及货物供应商、货运代理和收货人之间运输中的运输方式和载货人。因此&#xff0c;所有供应商必须确保所有运输工具和载货架都带有符合 VDA 标准下 4902 第 4 版&a…

恢复被.target勒索病毒加密的数据文件:拒绝向.target勒索病毒支付赎金

引言&#xff1a; 在当今数字时代&#xff0c;勒索病毒已成为网络安全领域的一大威胁&#xff0c;而.target勒索病毒是其中引起广泛关注的一种变种。本文将深入探讨.target勒索病毒的特点以及被其加密的数据文件恢复方法。数据的重要性不容小觑&#xff0c;您可添加我们的技术…

用Python和OpenCV搭建自己的一维码和QRCode扫描仪(步骤 + 源码)

导 读 本文主要介绍使用Python和OpenCV搭建自己的一维码和QRCode扫描仪&#xff08;步骤 源码&#xff09;。 项目简介 本文我们将创建一个程序来扫描图像中的二维码和条形码。对于这个程序&#xff0c;我们需要三个包&#xff0c;分别是OpenCV、NumPy和pyzbar。大多数 Pyth…