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

本节最终效果演示

在这里插入图片描述

文章目录

  • 本节最终效果演示
  • 系列目录
  • 前言
  • 配置可使用物品功能
    • 下载一些水果模型
    • 代码实现使用物品
  • 源码
  • 完结

系列目录

前言

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

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

本节主要实现了可使用的消耗品物品,并提示玩家各项属性的功能。

配置可使用物品功能

下载一些水果模型

https://sketchfab.com/3d-models/lowpoly-fruits-vegetables-d3be8fed96eb48be88b47bbe8d2951e1
在这里插入图片描述
这里可以适当增大物品的阻力,让物品可以滚动的同时,又不会滚远
在这里插入图片描述

代码实现使用物品

修改InventoryItem,按鼠标右键使用物品

public class InventoryItem : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{[Header("是否是消耗品")]public bool isConsumable;[Header("对玩家健康值的影响")]public float healthEffect;[Header("对玩家卡路里值的影响")]public float caloriesEffect;[Header("对玩家水分值的影响")]public float hydrationEffect;//。。。// 当鼠标点击物品时触发public void OnPointerDown(PointerEventData eventData){// 右键点击if (eventData.button == PointerEventData.InputButton.Right){if (isConsumable){// 设置待销毁的游戏对象itemPendingConsumption = gameObject;consumingFunction(healthEffect, caloriesEffect, hydrationEffect); // 消耗品使用效果计算}}}// 当鼠标释放物品时触发public void OnPointerUp(PointerEventData eventData){if (eventData.button == PointerEventData.InputButton.Right){if (isConsumable && itemPendingConsumption == gameObject){Destroy(gameObject); // 销毁物品对象// Destroy(gameObject);InventorySystem.Instance.ReCalculeList(); // 重新计算物品列表CraftingSystem.Instance.RefreshNeededItems(); // 刷新制作系统所需物品列表}}}private void consumingFunction(float healthEffect, float caloriesEffect, float hydrationEffect){itemInfoUI.SetActive(false); // 关闭物品信息UI显示healthEffectCalculation(healthEffect); // 计算玩家健康值影响caloriesEffectCalculation(caloriesEffect); // 计算玩家卡路里值影响hydrationEffectCalculation(hydrationEffect); // 计算玩家水分值影响}private static void healthEffectCalculation(float healthEffect){float currentHealth = PlayerState.Instance.currentHealth;float maxHealth = PlayerState.Instance.maxHealth;if (healthEffect != 0){if ((currentHealth + healthEffect) > maxHealth){PlayerState.Instance.setHealth(maxHealth);}else{PlayerState.Instance.setHealth(currentHealth + healthEffect);}}}private static void caloriesEffectCalculation(float caloriesEffect){float currentCalories = PlayerState.Instance.currentCalories;float maxCalories = PlayerState.Instance.maxCalories;if (caloriesEffect != 0){if ((currentCalories + caloriesEffect) > maxCalories){PlayerState.Instance.setHealth(maxCalories);}else{PlayerState.Instance.setHealth(currentCalories + caloriesEffect);}}}private static void hydrationEffectCalculation(float hydrationEffect){float currentHydrationPercent = PlayerState.Instance.currentHydrationPercent;float maxHydrationPercent = PlayerState.Instance.maxHydrationPercent;if (hydrationEffect != 0){if ((currentHydrationPercent + hydrationEffect) > maxHydrationPercent){PlayerState.Instance.setHealth(maxHydrationPercent);}else{PlayerState.Instance.setHealth(currentHydrationPercent + hydrationEffect);}}}
}

修改PlayerState

public void setHealth(float newHealth)
{currentHealth = newHealth;
}public void setCalories(float newCalories)
{currentCalories = newCalories;
}public void setHydration(float newHydration)
{currentHydrationPercent = newHydration;
}

挂载脚本,配置参数
在这里插入图片描述
效果
在这里插入图片描述

源码

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

完结

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

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

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

在这里插入图片描述

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

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

相关文章

Java面对对象

Java面向对象 面对对象概述,类与对象,继承,重写与重载,多态,抽象,封装,包,泛型,异常 面对对象概述 什么是面向对象(OOP) 面向对象(Object Ori…

【python3.8 pre-commit报错】记录pre-commit install报错

一、问题 在执行pre-commit install --allow-missing-config命令时,报错 Traceback (most recent call last):File "C:\ProgramData\Anaconda3\envs\py38\lib\runpy.py", line 192, in _run_module_as_mainreturn _run_code(code, main_globals, None,F…

html,css,js速成

准备&#xff1a;vscode配好c&#xff0c;python&#xff0c;vue环境。 1. html hypertext markup language(超文本标记语言) 1. 基础语法 一个html元素由开始标签&#xff0c;填充文本&#xff0c;结束标签构成。 常见标签说明<b></b>粗体<i></i>…

免费分享一套SpringBoot+Vue药店(药房)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue药店(药房)管理系统 &#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue药店(药房)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue药店(药房)管理系统 Java毕业设计…

Jmeter学习系列之五:基础线程组(Thread Group)

前言 线程组是一系列线程的集合,每一个线程代表着一个正在使用应用程序的用户。在 jmeter 中,每个线程意味着模拟一个真实用户向服务器发起请求。 在 jmeter 中,线程组组件运行用户设置线程数量、初始化方式等等配置。 例如,如果你设置线程数为 100,那么 jmeter 将创建…

C语言字符字符串函数:strcpy、strcat、strcmp介绍和模拟实现以及stnrcpy、strncat、strncmp介绍(近万字详解,建议三连收藏)

目录 1.strcpy(字符串拷贝函数&#xff09; 1.1函数介绍 1.2函数使用示范 1.3函数模拟实现 2.strcat(字符串追加函数&#xff09; 2.1函数介绍 2.2函数使用示范&#xff1a; 2.3函数模拟实现 &#xff1a; 2.4思考&#xff1a;字符串可以自己给自己追加吗&#xff1f; …

EDI报文到Excel转换方案详解

EDI目前已广泛应用于电子、物流、汽车、零售等行业。 越来越多的交易伙伴要求建立EDI连接&#xff0c;通过EDI来对接上下游交易伙伴&#xff0c;收发业务单据。 当我们与新的交易伙伴建立EDI连接时&#xff0c;有多种实施方案可供选择&#xff0c;如果您的单据量较少&#xf…

OBB头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

UE4学习笔记 FPS游戏制作3 添加武器

文章目录 章节目标为骨骼添加武器挂载点添加武器 章节目标 本章节为手部添加一个武器挂载点&#xff0c;并挂载一个武器 为骨骼添加武器挂载点 添加挂载点需要以一个动画片段为基础&#xff0c;为骨骼添加挂载点。 首先找到我们需要的动画片段&#xff0c;通常是idle 双击打…

17- OpenCV:图像矩(Image Moments)和点多边形测试

目录 一、图像矩 1、矩的概念介绍 2、相关的API 3、代码演示 二、点多边形测试 1、概念介绍-点多边形测试 2、cv::pointPolygonTest 3、代码演示 一、图像矩 引言 在数字图像处理、计算机视觉与相关领域中&#xff0c;图像矩(Image moments)是指图像的某些特定像素灰…

Tomcat 部署项目时 war 和 war exploded区别

在 Tomcat 调试部署的时候&#xff0c;我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别&#xff1a; war 模式&#xff1a;将WEB工程以包的形式上传到服务器 &#xff1b;war exploded 模式&#xff1a;将WEB工程以当前文件夹的位置…

总结了一下中继引擎(can中继器,TCP总机器)开发实际经验

多路数据进行中继的研究 1.数据中继的概念 数据中继是一种数据传输技术&#xff0c;用于在两个通信设备之间提供数字信号的传输。它利用数字信道传输数据信号&#xff0c;可以提供永久性和半永久性连接的数字数据传输信道。 数据中继的主要作用是提高通信质量和可靠性&#xf…

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器&#xff08;比如posix底层调用pthread相关接口创建线程&#xff0c;管理线程等&#xff09;&#xff0c;还包括消息队列&#xff08;message_queue)的实现&#xff0c;rtc::Thread启动后就作为一个永不停止的event l…

《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)

文章目录 8.1 使用 apply 和 map 函数8.1.1 基础知识8.1.2 重点案例&#xff1a;客户数据清洗和转换8.1.3 拓展案例一&#xff1a;产品评分调整8.1.4 拓展案例二&#xff1a;地址格式化 8.2 性能优化技巧8.2.1 基础知识8.2.2 重点案例&#xff1a;大型销售数据分析8.2.3 拓展案…

BUUCTF-Real-[Flask]SSTI

目录 漏洞描述 模板注入漏洞如何产生&#xff1f; 漏洞检测 漏洞利用 get flag ​编辑 漏洞描述 Flask框架&#xff08;jinja2&#xff09;服务端模板注入漏洞分析&#xff08;SSTI&#xff09; Flask 是一个 web 框架。也就是说 Flask 为您提供工具、库和技术来允许您构…

基于PSO-BP神经网络的风电功率MATLAB预测程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献 基于风电场运行特性的风电功率预测及应用分析——倪巡天 资源简介 由于自然风具有一定的随机性、不确定性与波动性&#xff0c;这将会使风电场的功率预测受到一定程度的影响&#xff0c;它们之间…

骨传导耳机的工作原理是什么?跟一般的耳机相比有什么特点?

骨传导耳机是利用骨传导技术研发而成一种新型蓝牙耳机&#xff0c;其传声方式很独特&#xff0c;不通过空气传导&#xff0c;而是通过人体骨骼来传递声音。 和传统的耳机相比&#xff0c;在佩戴方式和传声方式上都有所不同。 1、佩戴方式不同 首先就是佩戴方式不同&#xff0…

Spring Boot--08--Mybatis 之Mapper在IDEA中自动注入警告的解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 问题原因 解决方案方法1&#xff1a;为 Autowired 注解设置required false方法2&#xff1a;用 Resource 替换 Autowired方法3&#xff1a;在Mapper接口上加上Repo…

振动传感器接头MIL-C-5015玻璃烧结插座

振动传感器接头MIL-C-5015玻璃烧结插座产品主要用于加速度传感器&#xff0c;倾角传感器&#xff0c;耐高低温&#xff0c;耐腐蚀&#xff0c;适合使用恶劣环境。适用品牌有&#xff1a;MEGGITT&#xff0c;VibraSens,CTC measurement,BENTLY(本特利&#xff09;等众多品牌可定…

【代码随想录-链表】环形链表 II

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…