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

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

前言

欢迎来到【制作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();
    }

效果

源码

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

目录
相关文章
|
6月前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
149 2
|
6月前
|
图形学 索引
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
124 2
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
61 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱9(附带项目源码)
31 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱8(附带项目源码)
48 1
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱5(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱5(附带项目源码)
28 0
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱7(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱7(附带项目源码)
36 0
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱12(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱12(附带项目源码)
70 0
|
6月前
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱2(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱2(附带项目源码)
41 0
|
6月前
|
存储 图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱6(附带项目源码)
39 0