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

时间:2024-02-11 23:35:13 标签:  游戏  

本节最终效果演示

在这里插入图片描述

文章目录

  • 本节最终效果演示
  • 系列目录
  • 前言
  • 制作木板
    • 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是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

来源:分享自作者个人站点/博客

智能推荐

课程配套学习项目源码资源下载 https://download.c

标签:小游戏  

文章目录 1. 基础场景的搭建2. 游戏主面板2.1 拼出面板2.2 创建新面板2.3 设置面板复用2.4 退出界面

标签:游戏  

准备工作开发环境Python版本:3.7.8相关模块:requests模块;tqdm模块;pyfreeproxy模块;pyechats模块;以及一些python自带的模块。效果预览开始界面

标签:小游戏  还行  源码  大战  篮球  

3D台球 【3D台球】这款游戏的操作简洁明了&#xff0c;玩家只需要简单的练习两分钟便能够掌握。玩家需要用鼠标控制击球的方向和力度&#xff0c;将白球打进洞中。每次进球后&#xff0c;玩家需要选择下一个要

标签:台球  

文章目录 导入所需的模块坐标主游戏循环模块得分 贪吃蛇小游戏&#xff0c;那个曾经陪伴着00后和90后度过无数欢笑

标签:小游戏  

web前端项目-贪吃蛇小游戏 【贪吃蛇】是一款经典的小游戏&#xff0c;采用HTML、CSS和JavaScript技术进行开发&#xff0c;玩家通过控制一条蛇在地图上移动&#xff

标签:小游戏  

金山打字 【金山打字】这是一个练习打字的游戏&#xff0c;当游戏开始后&#xff0c;界面从顶部不断落下内容为随机字母的方块&#xff0c;当按下相对应的按键时&#xff0c;就会清除对应方块。游戏难度会随着落下的速度加快而提高。玩家每次成功清除字母方块&#x

标签:金山  

unity入门&nbsp;前言:这可不是标题党,虽然都是基础的操作,不过含括了基本的流程,比起脑海中的五花八门的画面,入门还是这个现实一点。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;这里插两句,unity国外官网下载会推荐你看一个简短的视频,国内官网下载没有不过可以另外找到,推荐看一下,相当的好,当初的我刚看完就激动的不行,准备做个惊世之作时,被自己的基础不足问题泼冷水。&nbsp;任务:使用unity完成一个Hello&nbsp; World程序,创建一个标准的Windows可执行程序。

标签:理论上  五分钟  入门  游戏  Unity  

目录 &#x1f60b;FPS游戏Demo &#x1f4a4;1.新建FPS模板项目 ⚒️2.装备枪 

标签:做一个  

*** Unity开发一款饥荒类生存游戏Demo技术指南 《饥荒》作为生存类游戏的老大哥&#xff0c;深受大家喜爱&#xff0c;这款游戏于2012年年底正式公测上线&#xff0c;距今已有10年的时间&#xff0c;从最初

标签:饥荒  

文章目录 1 通关输入玩家名1.1 设置UI1.2 增加脚本 2 失败面板3 优化鼠标处于游戏内锁定状态4 项目打包

标签:坦克  

猜你喜欢

在专业的游戏开发环境中,游戏资源,主要包括游戏模型和材质,通常由专业的建模师制作。这些建模师负责创造游戏中的视觉元素,然后将它们交给游戏开发团队以整合到游戏中。对于个人开发者来说,制作这些资源可能既困难又耗时。幸运的是,我们可以轻松地从在线游戏资源商店购买或下载所需的资源。这些商店中提供了丰富的资源,包括许多高质量的免费游戏资源。对于正在学习和探索游戏开发的人来说,这些资源是极其宝贵的,因为它们不仅节省时间,还能提供专业级别的内容作为学习和实践的基础。下面是一个通过资源商店购买到使用免费资源的流程示例。

标签:游戏开发  入门  资源  

很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学。为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3D游戏开发。&nbsp;本文不是广告,不是推广,是免费的纯干货!本文全名:喵的Unity游戏开发之路 - 移动&nbsp;-&nbsp;推球:游戏中的物理&nbsp;&nbsp;控制刚体球体的速度。通过跳跃支持垂直运动。检测地面及其角度。使用ProBuilder创建测试场景。

标签:之路  游戏开发  物理  游戏中  Unity  

目录前言生成地形高度生成生物群落模拟雨水侵蚀、生成河流(未完)生成洞穴、裂谷生成植被放置树木(Bezier曲线)生成建筑生成发展域(元胞自动机模型)放置建筑(DFS)连接道路(A*寻路)优化地形加载&渲染数据存储&查询前言在毕业之际,总算是做出了一个关于Minecraft类游戏地形生成的DEMO作为毕业设

标签:地形  类游戏  机制  Minecraft  

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;编写生命头文件&#xff08;二&#xff09;创建生命实现文件&#xff08;三&#xff

标签:实战  

游戏效果 文件目录 准备1&#xff1a;新建index

标签:小游戏  

1.unty Hub中安装WEBGL支持

标签:游戏  

目录 前言&#xff1a; 一、什么是AssetBundle

标签:资源  

目录 前言&#xff1a; 一、什么是AssetBundle

标签:资源  

大家好,欢迎来到 Crossin的编程教室 !今天跟大家讲一讲:如何做游戏游戏的主题是弹球游戏《PONG》,它是史上第一款街机游戏。因此选它作为我这个游戏开发系列的第一期主题。游戏引擎用的是 Python 的一个游戏库:pgzero。它是对 pygame 的一个封装,让你不需要写多余的套路代码,只要配置游戏的内容逻辑即可。我们这个游戏用它来写,一共只需要100行代码。首先需要安装 python 环境。这一步没搞定的同学,可以参考我们 python 入门教程:http://python666.cn ,上面有详细图文介绍。然后需要安装 pgzero 库,可以命令行下通过 pip 命令安装:

标签:弹球  教室  代码  游戏  PONG  

前言:&nbsp;这一篇章实现物理碰撞,就是游戏体碰撞减装甲,这几天想要试着做出兼具装甲与血量的模式,可自动回复的装甲与永久损伤的血量,在一些平台上找到了不少有意思的模型,有兴趣的可以自己找找模型替换一下。&nbsp;射击类游戏实例&nbsp;作为第一个用来发布讲解的游戏,我立马就想到了射击类游戏,当然不是第一人称射击的那种,是打小飞机累计得分的那种类型,方便魔改参数以及自行制作一些敌人的模型。

标签:射击游戏  实例  物理  Unity  

pygame &#43; numpy实现康威生命游戏 康威生命游戏介绍 康威生命游戏&#xff08;Conway&#39;s Game of Life&#xff09;是一种零玩家游戏&#xff0c;属于元胞自动机的一种。它由数学家约翰·康威&#xff08;John Horton Conway&#xff09;在1970年发明。生命游戏在一个无限的二维网格上进行&#xff0c;

标签:生命  

文章目录 主要内容一.Conway的“生命游戏”1.玩法代码如下&#xff08;示例&#xff

标签:生命  

原创不易,本文禁止抄袭、转载,侵权必究!&nbsp;一、游戏创意与设定1.1 游戏创意游戏以2022年的张家口冬季奥运会为创意背景,图片与图片两个吉祥物在战斗中夺回24枚会徽顺利会师为主题设计提供UI,Bgm,丰富的游戏素材并支持动态交互、战斗爆破、随机道具、生命条控制等丰富的功能&

标签:小游戏  太空  源码  大战  Pygame  

一、前言最近学习pyqt5中文教程时,最后一个例子制作了一个俄罗斯方块小游戏,由于解释的不是很清楚,所以源码有点看不懂,查找网上资料后,大概弄懂了源码的原理。二、绘制主窗口将主窗口居中,且设置了一个状态栏来显示三种信息:消除的行数,游戏暂停状态或者游戏结束状态。class Tetris(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self):

标签:小游戏  俄罗斯方块  源码  

QFramework.Toolkits 是包含 QFramework.cs 和 大量工具集的解决方案。在 QFramework v1.0 之前,QFramework.Toolkits 就是 QFramework 本身,而在 QFramework v1.0 开始,QFramework 拥有了自己的开发架构—QFramework.cs,于是原来的 QFramework 就变成了 QFramework.Toolkits。QFramework.Toolkits 称为 QFramework 工具集,是一套开箱即用的、渐进式的快速开发框架。目标是作为无框架经验的公司、独立开发者、以及

标签:框架  游戏  使用指南  游戏开发  独立  

01 回合制生存游戏 Cataclysm-DDA 是一款回合制生存游戏&#xff0c;背景设置在后世界末日的世界中。虽然有些人将其描述为“僵尸游戏”&#xff0c;但《大灾变》远不止这些。努力在一个严酷、持久、程序生成的世界中生存。 为食物、设备寻找一个死去的文明的残余物。或者&#xff0c;如果你幸运的话&#xff0c;还有一辆装满油的车辆&#xff0c;让你摆脱道奇的地狱。战斗以击败或逃离各种强大的怪物&#xff0c;从僵尸到巨型昆虫&#xff0c;再到杀手机器人和更奇怪和更致命的东西 … c&#43;&#43; 开源地址&#xff1a;https://github.com/CleverRaven/Cataclysm-DDA

标签:小游戏  

源码介绍 圈小猫游戏html源码&#xff

标签:小猫  

 还记得上次在第十七章中为BOSS创建的路径动画吧。我们写了一大坨的代码来描述BOSS的运动路径&#xff0c;但凡是写过几年代码的人都不会干出这样的事情。-_-! 没办法&#xff0c;谁叫那时候还没有脚本呢。这章就来补齐这块短板。 脚本属于配置化的一种&#xff0c;你可以把脚本当成配置文件来看待。要做脚本&#xff0c;优先要确定脚本的格式。常用的格式有&#xff1a; 1、二进制格式。优势是最节约空间&#xff0c;非常适合单片机这种嵌入式设备。劣势是无法直接阅读&#xff0c;不需要另外写个编解码工具来生成配置文件。 2、文本行格式。优势是可阅读&#xff0c;空间也可接受。劣势是修改容易出错&#xff0c;尽量

标签:游戏  

根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。 给定一个包含 m × n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a; 1 即为 活细胞 &#xff08;live&#xff09;&#xff0c;或 0 即为 死细胞 &#xff08;dead&#xff09;。每个细胞与其八个相邻位置&#xff08;水

标签:生命  

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼《定风波·莫听穿林打叶声》 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#xff09

标签:简易  

基于      项目01《游戏-02-开发》Unity2D      &#xff0c; 继续制作游戏&#xff1a; 首先要做的时切割人物Idle空闲状态下的动画&#xff0c; 在切割之前我们需要创建一个文件夹&#xff0c;用来存放动画控制器AnimatorContoller&#xff0c;

标签:项目  

基于      项目02《游戏-03-开发》Unity3D      &#xff0c; 因前三集资源以及代码冗余问题&#xff0c;本次项目对前三集进行了重做&#xff0c;资源及代码如下&#xff0c; 首先导入场景及人物资源&#xff0c; 为人物添加动画控制器Animator组件&#xff0c;

标签:项目  

基于     项目02《游戏-04-开发》Unity3D      &#xff0c; 【任务】UI背包系统&#xff0c; 首先将Game窗口设置成1920 * 1080&#xff0c;

标签:项目  

基于      项目02《游戏-05-开发》Unity3D      &#xff0c; 接下来做   背包系统的   存储框架 &#xff0c; 首先了解静态数据 与 动态数据&#xff0c;静态代表不变的数据&#xff0c;比如下图武器Icon&#xff0c; 其中&#xff0c;武器的名称&#xff0c;描述&#xff0c;图标&#xff0c;星级&#xff0c;详细技能描述都是不变的&

标签:项目  

基于      项目02《游戏-12-开发》Unity3D      &#xff0c; 任务 &#xff1a;宠物系统 及 人物头像血条 首先在主面板MainPanel预制体中新建一个Panel&#xff0c;

标签:项目  

相关问题

相关文章

热门文章

推荐文章

相关标签