Unity进阶--物品,背包,角色管理器

文章目录

  • 物品管理器
  • 背包管理器
  • 角色管理器

物品管理器

  • 物品数据 Item.json(json部分)(Resources/Data/Item)

    [{
    "id": 1,
    "name": "新手剑",
    "des": "这是一把宝剑",
    "price": 200,
    "icon": "",
    "attack": 10,
    "hp": 0
    },
    {
    "id": 2,
    "name": "新手药剂",
    "des":"这是新手药剂",
    "price": 100,
    "icon": "",
    "attack" : 0,
    "hp": 10
    }]
    • 数据类

      public class Item
      {public int id;public string name;public string des;public int price;public string icon;public int attack;public int hp;
      }
      
  • 物品管理类

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LitJson;public class ItemManager
    {private static ItemManager instance;public static ItemManager Instance{get{if(instance == null) {instance = new ItemManager();}return instance;}}//所有的物品信息private Item[] items;public ItemManager(){TextAsset json = Resources.Load<TextAsset>("Data/Item");//解析jsonitems = LitJson.JsonMapper.ToObject<Item[]>(json.text);}//通过物品id获取物品public Item GetItem(int id){foreach (Item item in items){if(item.id == id) {return item;}}return null;}
    }

背包管理器

  • InventoryManager

    using System.Collections;
    using System.Collections.Generic;//背包格子public class InventoryItem{//物品idpublic int ItemId;//个数public int Count = 1;}public class InventoryManager{//单例模式private static InventoryManager instance;public static InventoryManager Instance{get{if(instance == null){instance = new InventoryManager();return instance;}return instance;}}//背包集合public List<InventoryItem> Inventory = new List<InventoryItem>();//添加物品public void AddItem(int itemId, int count = 1){//查看背包中是否已经存在该物品foreach (InventoryItem tmpItem in Inventory){if (tmpItem.ItemId == itemId){//存在,就数量自增tmpItem.Count += count;return;}}//背包中不存在该物品InventoryItem item = new InventoryItem();item.ItemId = itemId;item.Count = count;Inventory.Add(item);}//移除物品public void Removeltem(int itemId, int count = 1){//遍历背包for (int i = 0; i < Inventory.Count; i++){InventoryItem item = Inventory[i];//如果存在该物品if (item.ItemId == itemId && item.Count > 0){//删除item.Count -= count;if (item.Count <= 0){Inventory.Remove(item);}  }}}//获取物品public InventoryItem GetItem(int itemId){foreach (InventoryItem tmpItem in Inventory){if (tmpItem.ItemId == itemId){return tmpItem;}}return null;}//清空背包public void RemoveAllItem() {Inventory.Clear();}
    }

角色管理器

using System.Collections;
using System.Collections.Generic;
using UnityEngine;//角色基本信息
public class Bai_Character{//姓名public string Name ="张三";//等级public int Level = 1;//经验public int CurrentExp = 0;public int Hp = 0;//最大血量public int MaxHp{get{return Level * 10;}   }//升到下一级需要的经验public int GetNextLevelExp(){return Level * 50;}//装备 -1代表无public int WeaponId = -1;public int ClothesId = -1;public int ShoesId = -1;//技能public List<int> SkillList = new List<int>();}public class CharacterManager 
{private static CharacterManager instance;public static CharacterManager Instance{get{if(instance == null){instance = new CharacterManager();return instance;}return instance;}}//玩家public Bai_Character character = new Bai_Character();//金钱public int Money = 0;//当前角色是否可控public bool canControl = true;//增加/减少金钱public void ChangeMoney(int money){Money += money;if (Money < 0) Money = 0;}//增加经验public void AddExp(int exp){character.CurrentExp += exp;//判断经验是否升级if (character.CurrentExp >= character.GetNextLevelExp()){//升级character.Level++;character.CurrentExp = 0;}}//改变血量public void ChangeHp(int hp){character.Hp += hp;//限制character.Hp的范围[0, character.MaxHp]character.Hp = Mathf.Clamp(character.Hp, 0, character.MaxHp);}#region 任务技能//添加技能public bool AddSkill(int skillld){if(character.SkillList.Contains(skillld)){return false;}character.SkillList.Add(skillld);return true;}//是否拥有此技能public bool HasSkill(int skillld){return character.SkillList.Contains(skillld);}//移除技能public void RemoveSkill(int skillld){if (character.SkillList.Contains(skillld)){character.SkillList.Remove(skillld);}}//所有技能public int[] GetSkills(){return character.SkillList.ToArray();}#endregion#region 人物装备//装备武器public void AddWeapon(int id){//如果背包有这个武器,允许装备InventoryItem item = InventoryManager.Instance.GetItem(id);if (item!= null){InventoryManager.Instance.Removeltem(id,1);}//如果当前有武器,武器卸载下来放入背包if (character.WeaponId > -1){InventoryManager.Instance.AddItem(character.WeaponId, 1);}character.WeaponId = id;}//获取当前武器public int GetWeapon(){return character.WeaponId;}//移除当前武器public void RemoveWeapon(){//如果当前有武器,武器卸载下来放入背包if (character.Weaponld > -1)InventoryManager.Instance.AddItem(character.WeaponId,1);}
#endregion
}

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

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

相关文章

React的hooks---useLayoutEffect

useLayoutEffect 与 useEffect 类似&#xff0c;与 useEffect 在浏览器 layout 和 painting 完成后异步执行 effect 不同的是&#xff0c;它会在浏览器布局 layout 之后&#xff0c;painting 之前同步执行 effect useLayoutEffect 的执行时机对比如下&#xff1a; import Rea…

Spring Security OAuth2.0 - 学习笔记

一、OAuth基本概念 1、什么是OAuth2.0 OAuth2.0是一个开放标准&#xff0c;允许用户授权第三方应用程序访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户和密码提供给第三方应用或分享数据的所有内容。 2、四种认证方式 1&#xff09;授权码模式 2&#x…

CHI中的网络层

System address map □ 系统中每个Requester(包括RN和HN)必须有一个System Address Map(SAM)来决定一个request的target ID&#xff1b; □ SAM的范围可能只是简单的为所有发送的requests提供一个固定的node ID □ SAM具体的结构和格式是由具体实现决定的 □ SAM必须可以对全地…

kotlin高阶函数

kotlin高阶函数 函数式API:一个函数的入参数为Lambda表达式的函数就是函数式api 例子: public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {return filterTo(ArrayList<T>(), predicate) }上面这段函数: 首先这个函…

SciencePub学术 | 物联网类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 物联网类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 物联网类重点SCIE&EI 【期刊简介】IF&#xff1a;7.5-8.0&#xff0c;JCR1区&#xff0c;中科院1/2区TOP&#xff1b; 【出版社…

C#中对公有变量的定义与使用

在使用C#做应用程序开发过程中&#xff0c;一个项目往往涉及公有变量的定义和使用&#xff0c;多了解和掌握这些基础知识对开发是有益处的。   对于项目中的公有变量&#xff0c;通常情况下有哪几种定义和使用方式&#xff1f; 一、在程序中定义和使用 比如&#xff0c;我们在…

速度优化:重新认识速度优化

作者&#xff1a;helson赵子健 应用的速度优化是我们使用最频繁&#xff0c;也是应用最重要的优化之一&#xff0c;它包括启动速度优化&#xff0c;页面打开速度优化&#xff0c;功能或业务执行速度优化等等&#xff0c;能够直接提升应用的用户体验。因此&#xff0c;只要是 An…

uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好

学习目标&#xff1a; 学习目标如下&#xff1a; 例如&#xff1a; uniapp 中 的progress加载进度条 的使用&#xff0c;在 页面显示数据加载的进度条&#xff0c;使用户的使用体验效果更好 学习内容&#xff1a; 学习内容如下所示&#xff1a; 相关属性的说明 进度条的显…

[ELK安装篇]:基于Docker虚拟容器化(主要LogStash)

文章目录 一&#xff1a;前置准备-(参考之前博客)&#xff1a;1.1&#xff1a;准备Elasticsearch和Kibana环境&#xff1a;1.1.1&#xff1a;地址&#xff1a;https://blog.csdn.net/Abraxs/article/details/128517777 二&#xff1a;Docker安装LogStash(数据收集引擎&#xff…

【C#】医学实验室云LIS检验信息系统源码 采用B/S架构

基于B/S架构的医学实验室云LIS检验信息系统&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问&#xff0c;技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等。 一、系统概况 本系统是将各种生化、免疫、…

CBSCRIPT(CB)脚本执行示例

为自己的软件增加脚本编写功能并自定义API CBScript 自定义脚本语言简介 实现自定义关键字 1、执行While循环语句 string str "//定义变量 var a0 //设置标签 WHILE a<5aa1 ENDWHILE ";DataExcel grid Grid;FunctionBody script ScriptBuilder.BuilderScr…

【MySQL】内置函数

目录 一、日期函数 1、获得年月日 2、获得时分秒 3、获得时间戳 4、在日期的基础上加日期 5、在日期的基础上减去时间 6、计算两个日期之间相差多少天 7、案例 二、字符串函数 1、获取emp表的ename列的字符集 2、要求显示exam_result表中的信息 3、求学生表中学生姓…

【洛谷】P1888 三角函数

三角函数 题目描述 输入一组勾股数 a , b , c &#xff08; a ≠ b ≠ c &#xff09; a,b,c&#xff08;a\neq b\neq c&#xff09; a,b,c&#xff08;abc&#xff09;&#xff0c;用分数格式输出其较小锐角的正弦值。&#xff08;要求约分。&#xff09; 输入格式 一…

【Git】git仓库完整迁移

代码仓库&#xff0c;在公司有两个团队在做&#xff0c;并且gitlab所在环境不互通。有一个团队做的时间久一点&#xff0c;另一个团队想要用并做一些定制。就需要将代码转移到另一个gitlab管理。 参考&#xff1a;【Git】git仓库完整迁移&#xff08;代码&#xff0c;分支&…

GO学习之 Map 操作

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 文章目录 GO系列前言一、什么是Map二、Map的基本操作2.1 定义map2.2 添加和修改键值对2.3 删除键值对2.4 遍历键值对2.5 判断某个key是否存在 三、总结…

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…

el-table 表格头部合并

<el-table v-loading"listLoading" :key"tableKey" :data"list" stripe border fit highlight-current-rowstyle"width: 100%;" size"mini"><el-table-column label"第一行" align"center">…

免费的音频转换器带你突破音频格式束缚

曾经有一个名叫吴欢的音乐爱好者&#xff0c;他热爱收集各种音频文件&#xff0c;从经典的老歌到新潮的流行曲&#xff0c;样样都不放过。然而&#xff0c;他遇到了一个令人头疼的问题&#xff1a;因为音频格式的不同&#xff0c;他无法将一些珍贵的音乐记录转化为文字形式。他…

面试题 汇总

一、 七层模型和五层模型以及对应的作用 二、 TCP和UDP的区别 UDPTCP是否连接无连接面向连接是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信传输方式面向报文面向字节…

01 Excel常用高频快捷键汇总

目录 一、简介二、快捷键介绍2.1 常用基本快捷键1 复制&#xff1a;CtrlC2 粘贴&#xff1a;CtrlV3 剪切&#xff1a;CtrlX4 撤销&#xff1a;CtrlZ5 全选&#xff1a;CtrlA 2.2 常用高级快捷键1 单元格内强制换行&#xff1a;AltEnter2 批量输入相同的内容&#xff1a;CtrlEnt…