【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏17(附项目源码)

本节最终效果演示

在这里插入图片描述

文章目录

  • 本节最终效果演示
  • 系列目录
  • 前言
  • 制作木板
    • UI直接复制和工具一样的即可
    • 检查背包是否有指定数量的空插槽
  • 源码
  • 完结

系列目录

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。

本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。

本节主要实现新的制作功能。

制作木板

UI直接复制和工具一样的即可

在这里插入图片描述

检查背包是否有指定数量的空插槽

修改InventorySystem的CheckIfFull方法,改名为CheckSlotsAvailable,因为我们需要判断背包是否有指定数量的空位

//判断背包是否有指定数量的空位
public bool CheckSlotsAvailable(int emptyMeeded)
{int emptySlot = 0;// 遍历slotList列表中的每个槽位对象foreach (GameObject slot in slotList){// 如果槽位对象没有子对象,及是空位if (slot.transform.childCount <= 0){emptySlot += 1;}}// 如果空位大于等于emptyMeeded,返回true,否则返回falseif (emptySlot >= emptyMeeded){return true;}else{return false;}
}

记得同步修改其他调用该方法的地方,比如
在这里插入图片描述

修改Blueprint蓝图,添加制作数量

public int numOfItrmsToProduce; // 生成的数量public Blueprint(string name, int producedItems, int reqNUM, string R1, int R1num, string R2, int R2num)
{numOfItrmsToProduce = producedItems;//。。。
}

修改CraftingSystem

[Header("材料")]
public GameObject materialsScreenUl;
Button materialsBTN;
Button craftPlankBTN;// 制作木板按钮
TextMeshProUGUI LogReq1;// 需求材料文本
public Blueprint PlankBLP = new Blueprint("木板", 2, 1, "圆木", 1, "", 0); //木板制作蓝图void Start()
{//。。。/// <summary>/// 材料/// </summary>materialsBTN = craftingScreenUl.transform.Find("背景").Find("材料").GetComponent<Button>();materialsBTN.onClick.AddListener(delegate { OpenMaterialsCategory(); });// 木板LogReq1 = materialsScreenUl.transform.Find("背景").Find("内容").Find("木板").Find("材料1").GetComponent<TextMeshProUGUI>();craftPlankBTN = materialsScreenUl.transform.Find("背景").Find("内容").Find("木板").Find("制作按钮").GetComponent<Button>();craftPlankBTN.onClick.AddListener(delegate { CraftAnyltem(PlankBLP); });RefreshNeededItems();
}//制作事件
void CraftAnyltem(Blueprint blueprintToCraft)
{//判断背包是否够位置if(!InventorySystem.Instance.CheckSlotsAvailable(blueprintToCraft.numOfItrmsToProduce)){//TODO报错提示,错误提示音Debug.Log("库存不足");return;}AudioManager.Instance.PlaySFX("制作");for (int i = 0; i < blueprintToCraft.numOfItrmsToProduce; i++){InventorySystem.Instance.AddToInventory(blueprintToCraft.itemName);}//按需求的总数,删除对应的物品if (blueprintToCraft.numOfRequirements == 1){InventorySystem.Instance.RemoveItem(blueprintToCraft.Req1, blueprintToCraft.Req1amount);}else if (blueprintToCraft.numOfRequirements == 2){InventorySystem.Instance.RemoveItem(blueprintToCraft.Req1, blueprintToCraft.Req1amount);InventorySystem.Instance.RemoveItem(blueprintToCraft.Req2, blueprintToCraft.Req2amount);}
}//刷新需要的物品
public void RefreshNeededItems()
{int stone_count = 0; // 石头数量int stick_count = 0; // 树枝数量int log_count = 0; // 圆木数量inventoryltemList = InventorySystem.Instance.itemList; // 获取物品清单foreach (string itemName in inventoryltemList) // 遍历物品清单{switch (itemName){case "小石头":stone_count += 1;break;case "树枝":stick_count += 1;break;case "圆木":log_count += 1;break;}}// 更新需求文本AxeReq1.text = "2 石头 [" + stone_count + "]"; // 显示需要的石头数量AxeReq2.text = "2 树枝 [" + stick_count + "]"; // 显示需要的树枝数量LogReq1.text = "1 圆木 [" + log_count + "]";//斧头制作按钮if (stone_count >= 2 && stick_count >= 2){craftAxeBTN.gameObject.SetActive(true);}else{craftAxeBTN.gameObject.SetActive(false);}//木板制作按钮if (log_count >= 1){craftPlankBTN.gameObject.SetActive(true);}else{craftPlankBTN.gameObject.SetActive(false);}
}void OpenToolsCategory()
{craftingScreenUl.SetActive(false); // 关闭制作界面toolsScreenUl.SetActive(true); // 打开工具界面   materialsScreenUl.SetActive(false); // 关闭材料界面   
}void OpenMaterialsCategory()
{craftingScreenUl.SetActive(false);toolsScreenUl.SetActive(false);materialsScreenUl.SetActive(true);
}void Update()
{if (Input.GetKeyDown(KeyCode.I)){// 打开关闭制作界面craftingScreenUl.SetActive(!isOpen);if (isOpen){toolsScreenUl.SetActive(false); // 关闭工具界面materialsScreenUl.SetActive(false); // 关闭材料界面}isOpen = !isOpen;// 设置鼠标锁定模式为无锁定,允许鼠标在界面上移动Cursor.lockState = (isOpen || InventorySystem.Instance.isOpen) ? CursorLockMode.None : CursorLockMode.Locked;}
}

配置参数
在这里插入图片描述
效果
在这里插入图片描述

源码

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

完结

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

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot184基于springboot的校园网上店铺的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Go结构体深度探索:从基础到应用

在Go语言中&#xff0c;结构体是核心的数据组织工具&#xff0c;提供了灵活的手段来处理复杂数据。本文深入探讨了结构体的定义、类型、字面量表示和使用方法&#xff0c;旨在为读者呈现Go结构体的全面视角。通过结构体&#xff0c;开发者可以实现更加模块化、高效的代码设计。…

位运算+leetcode ( 2 )

题一&#xff1a;只出现一次的数字&#xff08;1&#xff09; 1.链接 136. 只出现一次的数字 - 力扣&#xff08;LeetCode&#xff09; 2.思想 借用位运算中异或操作符的特点&#xff0c;a^a0&#xff0c;0^aa先定义一个sum0就用一个循环来遍历这个数组&#xff0c;每次都进行…

基于JAVA的CRM客户管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 用例设计3.2 E-R 图设计3.3 数据库设计3.3.1 客户表3.3.2 商品表3.3.3 客户跟踪表3.3.4 客户消费表3.3.5 系统角色表 四、系统展示五、核心代码5.1 查询客户5.2 新增客户跟踪记录5.3 新增客户消费订单5.4 查…

HandlerMapping之RequestMappingHandlerMapping作用详解

前言RequestMappingHandlerMapping RequestMappingRequestMapping的注册总结 前言 上回我们知道HandlerMapping是用来寻找Handler的&#xff0c;并不与Handler的类型或者实现绑定&#xff0c;而是根据需要定义的。 那么为什么要单独给RequestMapping实现一个HandlerMapping&…

《UE5_C++多人TPS完整教程》学习笔记12 ——《P13 加入游戏会话(Joining The Sessions)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P13 加入游戏会话&#xff08;Joining The Session&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是…

操作系统基础:IO管理概述【上】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;OS从基础到进阶 &#x1f3c6;&#x1f3c6;本文完整PDF源文件请翻阅至文章底部下载。&#x1f3c6;&#x1f3c6; &#x1f3ae;1 I/O设备的基本概念与分类&#x1f52b;1.1 总览&#x…

最新Burp Suite入门讲解

Burp Suite的安装 Burp Suite是一款集成化的渗透测试工具&#xff0c;包含了很多功能&#xff0c;可以帮助我们高效地完成对Web应用程序的渗透测试和安全检测。 Burp Suite由Java语言编写&#xff0c;Java自身的跨平台性使我们能更方便地学习和使用这款软件。不像其他自动化测…

HTML 超文本标记语言

超文本标记语言 HTML 在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。 页面制作的标准语言&#xff1a;HTML。 超文本标记语言 HTML (HyperText Markup Language) 是一种制作万维网页面的标准语言&#xff0c;它消除了不同计算机之间信息交流的障碍&#xff0c…

P1164 小A点菜题解

题目 uim拿到了uoi的镭牌后&#xff0c;立刻拉着基友小A到了一家餐馆&#xff0c;很低端的那种。uim指着墙上的价目表&#xff08;太低级了没有菜单&#xff09;&#xff0c;说&#xff1a;“随便点”。 不过uim由于买了一些书&#xff0c;口袋里只剩M元(M≤10000)。 餐馆虽…

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块&#xff1a;在系统首页可以查看首页、漫画投稿、…

Ubuntu20.04更新Cmake版本详解

最近在跑一个融合惯导定位的slam框架ins_eskf_kitti&#xff0c;在框架的安装过程中&#xff0c;需要对从GitHub上克隆下来的glog进行编译。其命令如下&#xff1a; glog&#xff1a; git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. m…