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

news/2024/11/28 20:52:58/

效果演示

在这里插入图片描述

文章目录

  • 效果演示
  • 系列目录
  • 前言
  • 箱子库存
  • 源码
  • 完结

系列目录

前言

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

箱子库存

新增库存箱子脚本

public class Chest : MonoBehaviour
{[SerializeField] private GameObject chestUIPrefab; // 宝箱UI预制体[SerializeField] private Transform chestUIParent; // 宝箱UI的父对象[HideInInspector] public List<Slot> allChestSlots = new List<Slot>(); // 所有宝箱槽位列表[HideInInspector] public GameObject chestInstantiatedParent; // 实例化的宝箱父对象private void Start(){chestInstantiatedParent = Instantiate(chestUIPrefab, chestUIParent.position, chestUIParent.rotation, chestUIParent);// 获取所有宝箱槽位,并添加到槽位列表中foreach (Transform childSlot in chestInstantiatedParent.transform.GetChild(1)){Slot childSlotScript = childSlot.GetComponent<Slot>();allChestSlots.Add(childSlotScript);childSlotScript.initialiseSlot();// 初始化槽位信息}chestInstantiatedParent.SetActive(false);Inventory.Instance.allInventorySlots.AddRange(allChestSlots);}
}

绘制箱子库存UI,然后做成预制体,删除原来的
在这里插入图片描述
配置箱子参数
在这里插入图片描述
修改Inventory

public List<Slot> characterInventorySlots = new List<Slot>(); // 人物槽位列表,也就是背包+快捷栏[Header("宝箱")]
public LayerMask chestLayer;
private List<Slot> chestSloats = new List<Slot>();//当前宝箱的槽位列表
private GameObject chestSlotParent;//宝箱槽位的父对象
private Chest chestInfo;public new void Awake()
{characterInventorySlots.AddRange(hotbarSlots);characterInventorySlots.AddRange(inventorySloats);//。。。
}// 显示物品名称和拾取物品
private void itemRaycast(bool hasClicked = false)
{//...if (hasClicked && Physics.Raycast(ray, out hit, raycastDistance, chestLayer) && chestSlotParent == null){chest = hit.collider.GetComponent<Chest>();openChest(chest);}
}// 打开宝箱时的操作
private void openChest(Chest chest)
{toggleInventory(true);// 打开玩家背包界面chestSloats = chest.allChestSlots;// 设置当前宝箱的槽位列表chestSlotParent = chest.chestInstantiatedParent;// 设置宝箱槽位的父对象为当前打开的宝箱界面chestSlotParent.SetActive(true);// 显示宝箱界面
}private void toggleInventory(bool enable)
{//关闭背包时,关闭所有鼠标悬停在该槽位上的标志if (!enable){foreach (Slot curSlot in allInventorySlots){curSlot.hovered = false;}}//关闭背包时,清除所有的宝箱数据if (!enable && chestSlotParent != null){chestSlotParent.SetActive(false);chestSlotParent = null;chestSloats = null;chest = null;}//...
}

修改宝箱交互层级
在这里插入图片描述
效果
在这里插入图片描述

源码

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

完结

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

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

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

在这里插入图片描述


http://www.ppmy.cn/news/1353673.html

相关文章

【吴恩达·机器学习】第三章:分类任务:逻辑回归模型(交叉熵损失函数、决策边界、过拟合、正则化)

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024每日一言&#x1f33c;: 勇敢的人&#xff0c;不是不落泪的人&#xff0c;而是愿意含着泪继续奔跑的人。 ——《朗读者》 0、声明 本系列博客文章是博主本人根据吴…

C/C++如何把指针所指向的指针设为空指针?

实践出真知&#xff0c;指针对于初学的友友来说&#xff0c;头都要大了。喵喵一直遵循在实践中学&#xff0c;在学习中实践&#xff0c;相信你也会有所得&#xff01; 以下是该问题的解决方案&#xff1a; int** ptrPtr new int*; // 创建指向指针的指针 int* ptr new int;…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

Python setattr函数

在Python编程中&#xff0c;setattr()函数是一个有用且灵活的内置函数&#xff0c;用于设置对象的属性值。它可以在运行时动态地设置对象的属性&#xff0c;无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码&#xff0c;并探讨其在实际编程中的…

Spring AMQP(3.1.1)设置ConfirmCallback和ReturnsCallback

文章目录 一、起因二、代码1. 定义exchange和queue2. RabbitTemplate3. EnhancedCorrelationData4. 发送消息 环境如下 VersionSpringBoot3.2.1spring-amqp3.1.1RabbitMq3-management 一、起因 老版本的spring-amqp在CorrelationData上设置ConfirmCallback。但是今天却突然发…

洛谷: P1480 A/B Problem

题目描述 输入两个整数 a , b a,b a,b&#xff0c;输出它们的商。 输入格式 两行&#xff0c;第一行是被除数&#xff0c;第二行是除数。 输出格式 一行&#xff0c;商的整数部分。 样例 #1 样例输入 #1 10 2样例输出 #1 5提示 0 ≤ a ≤ 1 0 5000 0\le a\le 10^{500…

openJudge | 循环移动 C语言

总时间限制: 1000ms 内存限制: 65536kB 描述 给定一组整数&#xff0c;要求利用数组把这组数保存起来&#xff0c;再利用指针实现对数组中的数循环移动。假定共有n个整数&#xff0c;则要使前面各数顺序向后移m个位置&#xff0c;并使最后m各数变为最前面的m各数。 注意&…

CSS设置盒子阴影

语法 box-shadow: *h-shadow v-shadow blur spread color* inset; 注释: box-shadow向框添加一个或多个阴影. 该属性是由逗号分隔的阴影列表,每个阴影由2-4个长度值、可选的颜色值及可选的inset关键词来规定。省略长度的值是0。 外阴影 a、给元素右边框和下边框加外阴影——把…