本节最终效果演示
文章目录
- 本节最终效果演示
- 系列目录
- 前言
- 配置可使用物品功能
- 下载一些水果模型
- 代码实现使用物品
- 源码
- 完结
系列目录
前言
欢迎来到【制作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是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~