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

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

前言

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

拖放、交换物品

绘制拖拽物品插槽UI

记得默认透明的设为0,并去除射线检测

修改Inventory,控制拖放功能

[Header("拖放")]
public Image dragIconImage;//拖拽图标的Image组件
private Item currentDraggedItem;//当前被拖拽的物品
private int currentDragSlotIndex = -1;//当前被拖拽物品的槽位索引

public void Update()
{
    //。。。

    if (inventory.activeInHierarchy && Input.GetMouseButtonDown(0))
    {
        dragInventoryIcon();//拖拽物品
    }
    else if (currentDragSlotIndex != -1 && Input.GetMouseButtonUp(0) || currentDragSlotIndex != -1 && !inventory.activeInHierarchy)
    {
        dropInventoryIcon();//放下物品
    }

    dragIconImage.transform.position = Input.mousePosition;
}

// 开始拖拽背包中的一个物品图标
private void dragInventoryIcon()
{
    for (int i = 0; i < allInventorySlots.Count; i++)
    {
        Slot curSlot = allInventorySlots[i]; // 获取当前遍历到的槽位
        if (curSlot.hovered && curSlot.hasItem()) // 如果鼠标悬停在有物品的槽位上
        {
            currentDragSlotIndex = i; // 更新当前正在拖拽的槽位索引变量
            currentDraggedItem = curSlot.getItem(); // 从当前槽位获取物品
            dragIconImage.sprite = currentDraggedItem.icon; // 设置拖拽图标的精灵为物品的图标
            dragIconImage.color = new Color(1, 1, 1, 1); // 使跟随鼠标的图标不透明(可见)
            curSlot.setItem(null); // 从我们刚刚拿起物品的槽位中移除物品
            break; // 找到后即退出循环
        }
    }
}

// 放下正在拖拽的背包图标
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(); // 获取该槽位的物品以供交换
                curSlot.setItem(currentDraggedItem); // 将拖拽的物品放入当前槽位
                allInventorySlots[currentDragSlotIndex].setItem(itemToSwap); // 将被交换的物品放回原来的拖拽槽位
            }
            else // 如果槽位为空,则直接放置物品,无需交换
            {
                curSlot.setItem(currentDraggedItem);
            }
            resetDragVariables(); // 重置拖拽相关的变量
            return; // 放置成功后即退出函数
        }
    }
    // 如果没有悬停在任何槽位上(即放置位置无效),则将物品放回原来的槽位
    allInventorySlots[currentDragSlotIndex].setItem(currentDraggedItem);
    resetDragVariables();
}

// 重置拖拽相关的变量
private void resetDragVariables()
{
    // 逻辑代码来重置相关变量,例如
    currentDragSlotIndex = -1;
    currentDraggedItem = null;
}

配置参数

效果,实现了物品拖拽和交换

源码

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

目录
相关文章
|
7月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
10月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
570 18
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
1398 6
|
图形学 开发者 搜索推荐
Unity Asset Store资源大解密:自制与现成素材的优劣对比分析,教你如何巧用海量资产加速游戏开发进度
【8月更文挑战第31天】游戏开发充满挑战,尤其对独立开发者或小团队而言。Unity Asset Store 提供了丰富的资源库,涵盖美术、模板、音频和脚本等,能显著加快开发进度。自制资源虽具个性化,但耗时长且需专业技能;而 Asset Store 的资源经官方审核,质量可靠,可大幅缩短开发周期,使开发者更专注于核心玩法。然而,使用第三方资源需注意版权问题,且可能需调整以适应特定需求。总体而言,合理利用 Asset Store 能显著提升开发效率和项目质量。
609 1
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
895 2
|
图形学
【unity实战】Unity中基于瓦片的网格库存系统——类似《逃离塔科夫》的库存系统(下)
【unity实战】Unity中基于瓦片的网格库存系统——类似《逃离塔科夫》的库存系统
807 1
|
图形学 容器
【unity实战】Unity中基于瓦片的网格库存系统——类似《逃离塔科夫》的库存系统(上)
【unity实战】Unity中基于瓦片的网格库存系统——类似《逃离塔科夫》的库存系统
959 1
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
722 0

热门文章

最新文章