Unity 游戏黑暗之光笔记

第五章 背包系统的实现

详细过程参考,笔者一直有BUG……导致后面的很多内容没法写全

1.开发功能按钮

  • 注意Anchors的位置,可以让图标在窗口变化时保持相对位置不会变化

2.功能按钮的事件的监听

  • 给FunctionBar添加脚本分别给按钮添加点击方法监听事件
 public void OnStatusButtonClick() {}
public void OnBagButtonClick() {}
public void OnEquipButtonClick() {}
public void OnSkillButtonClick() {}
public void OnSettingButtonClick() {}

3.创建物品信息的管理系统

  • 使用Text文件存储信息

    • 添加icon给Atals图集
  • 创建用来管理管理信息的TXT 文档 OjbectsInfoList
//对应的信息名称
//ID,游戏名称,icon名称,类型,hp,mp,出售价,购买价
1001,小瓶血药,icon-potion1,Drug,50,0,50,60
1002,大瓶血药,icon-potion2,Drug,100,0,70,100
1003,蓝药,icon-potion3,Drug,0,100,60,80

创建ObjectInfo脚本管理信息

//使用单例模式void Awake() {_instance = this;ReadInfo();}//定义各个物品的功能
public enum ObjectType {Drug,Equip,Mat
}
//表示物品的一条信息
public class ObjectInfo {public int id;    //id public string name;//名称public string icon_name;//这个名称是存储在图集中的名称 icon名称public ObjectType type;//类型(药品drug)public int hp; //加血量值public int mp;//加魔法值public int price_sell;//出售价public int price_buy;//购买
}
  • 在程序中读取文本,将物品信息读取到内存

使用TextAcess类

获取文本文件

public TextAsset objectsInfoListText;

要把获取的字符存到字典要引用新的命名空间

using System.Collections.Generic;
 public static ObjectsInfo _instance;private Dictionary<int, ObjectInfo> objectInfoDict = new Dictionary<int, ObjectInfo>();public TextAsset objectsInfoListText;//使用单例模式void Awake() {_instance = this;ReadInfo();}//得到信息的方法,从字典里取用public ObjectInfo GetObjectInfoById(int id) {ObjectInfo info=null;objectInfoDict.TryGetValue(id, out info);return info;}void ReadInfo() {//取到文本文件中所有的字符string text = objectsInfoListText.text;//按照行去数据,需要拆分数据到数组string[] strArray = text.Split('\n');foreach (string str in strArray) {string[] proArray = str.Split(',');//实例化info存储信息ObjectInfo info = new ObjectInfo();//ID转换成字符类型int id = int.Parse(proArray[0]);string name = proArray[1];string icon_name = proArray[2];string str_type = proArray[3];//获取类型,根据获得的字符串来赋值类型ObjectType type = ObjectType.Drug;switch (str_type) {case "Drug":type = ObjectType.Drug;break;case "Equip":type = ObjectType.Equip;break;case "Mat":type = ObjectType.Mat;break;}info.id =  ; info.name = name; info.icon_name = icon_name;info.type = type;if (type == ObjectType.Drug) {int hp = int.Parse(proArray[4]);int mp = int.Parse(proArray[5]);int price_sell = int.Parse(proArray[6]);int price_buy = int.Parse(proArray[7]);info.hp = hp; info.mp = mp;info.price_buy = price_buy; info.price_sell = price_sell;}objectInfoDict.Add(id, info);//添加到字典中,id为key,可以很方便的根据id查找到这个物品信息}}
4. 设计背包界面

  • 为了在鼠标移动到面板点击时角色不移动,添加box collider组件

5.创建脚本管理背包物品

  • 创建Inventory脚本设置设置单例模式方便调用
    //设置单例模式public static Inventory _instance;private TweenPosition tween;//获取背包格子的数组public List<InventoryItemGrid> itemGrids = new List<InventoryItemGrid>();//金币的数量private int coinCount = 1000;//管理金币的显示public UILabel coinNumberLable;private void Awake(){_instance = this;tween = this.GetComponent<TweenPosition>();}//播放动画的方法public void Show(){tween.PlayForward();}public void Hide(){tween.PlayReverse();}
  • 单个网格中存放信息,若要创建InventoryItemGrid脚本进行信息的存储,要给网格添加box Collider组件

  • 创建Tag区分网格中是否存在物品,给不同的网格制定Tag

 //存储物品信息public  int id=0;//存储物品信息private ObjectInfo info = null;//物品个数public int num = 0;public UILabel numLabel;// Use this for initializationvoid Start () {numLabel = this.GetComponentInChildren<UILabel>();}//控制网格的显示方法,默认num里为1,根据idmunber显示public void SetId(int id, int num = 1) {this.id = id;info = ObjectsInfo._instance.GetObjectInfoById(id);//获取子物体InventoryItem item = this.GetComponentInChildren<InventoryItem>();item.SetIconName(info.icon_name);//更新显示numLabel.enabled = true;this.num = num;numLabel.text = num.ToString();}public void PlusNumber(int num = 1) {this.num += num;numLabel.text = this.num.ToString();}//清空 格子存的物品信息public void ClearInfo() {id = 0;info = null;num = 0; numLabel.enabled = false;}
  • InventoryItem脚本
private UISprite sprite;private void Awake(){base.Awake();sprite = this.GetComponent<UISprite>();}//判断鼠标是否 在网格中protected override void OnDragDropRelease(GameObject surface){base.OnDragDropRelease(surface);if(surface!=null){}}public void SetId(int id){ObjectInfo info = ObjectsInfo._instance.GetObjectInfoById(id);sprite.spriteName = info.icon_name;}//设置名字public void SetIconName(string icon_name){sprite.spriteName = icon_name;}

6.实现物品拾取功能

Unity 游戏黑暗之光笔记第五章 背包系统的实现相关推荐

  1. Unity 游戏黑暗之光笔记第四章 任务系统的实现

    Unity 游戏黑暗之光笔记 第四章 任务系统的实现 具体步骤可以看RPG游戏<黑暗之光>流程介绍与代码分析之(四) 注意要点 在把鼠标放在任务面板上点击时,为了让角色不移动,在Playe ...

  2. Unity 游戏黑暗之光笔记第一章 完善场景

    Unity 游戏黑暗之光笔记 第一章 完善场景 1. 导入资地形.地貌资源,新建场景,导入地形.地貌prefab 2. 设置相机与视野匹配 选中主摄像机,点选菜单栏中GameObject > A ...

  3. 《Python从入门到实践》读书笔记——第五章 if语句

    <Python从入门到实践>读书笔记--第五章 if语句 1. 一个简单示例 cars = ['audi', 'bwm', 'subaru', 'toyota']for car in ca ...

  4. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  5. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_/*<深入理解C指针>学习笔记 -- 第五章*//*不应该修改的字符串就应该用 co ...

  6. [云炬创业基础笔记]第五章创业机会评估测试2

    [云炬创业基础笔记]第五章创业机会评估测试1

  7. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  8. 《金融学》笔记 第五章 金融市场

    <金融学>笔记 第五章 金融市场 前言 在<<金融学>笔记>中开了一个头,现在完善具体细节. 金融范畴篇 第一章 货币的本质 第二章 货币制度 第三章 信用.利息和 ...

  9. HTML5 2D游戏引擎研发系列 第五章

    HTML5 2D游戏引擎研发系列 第五章 <Canvas技术篇-画布技术-纹理集复杂动画> 作者:HTML5游戏开发者社区-白泽 转载请注明出处:http://html5gamedev.o ...

最新文章

  1. 对c语言这门课程的认识,一路走来,浅谈c语言的学习感想
  2. Python完全学习大师班
  3. 今天我们来聊一聊 Spring 中的线程安全性
  4. 咱们来聊聊快速失败和安全失败
  5. 2008年北大核心有效期 计算机类核心(2011-01-31 15:02:46)
  6. oracle如何查询系统变量数据,Oracle如何对IN子查询使用绑定变量(转)
  7. 我在编写《微软System Center 2012 R2私有云部署实战》中应用的一些小技巧
  8. python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
  9. 苹果官宣:这届“春晚”,好早!
  10. 【报告分享】2020年中国人工智能商业落地研究报告.pdf(附下载链接)
  11. IDEA安装“Translation”插件
  12. Android开发之onCreate
  13. Android ListView观察者模式的应用
  14. 编程基础(二)——汇编
  15. Linux系统重要日志文件
  16. 20行Python代码爬取王者荣耀全皮肤
  17. emu8086的入门使用
  18. 老飞飞魅力飞飞关于攻击辅助研究带易语言源码视频教程
  19. msg文件转成html文件,如何将MSG格式的文件转换为PDF格式文件?
  20. tensorflow入门教程(二十六)人脸识别(上)

热门文章

  1. 国内外智慧城市建设人才与开发的经验借鉴
  2. 如何判断投影坐标是 3 度带还是 6 度带?如何计算中央子午线经度?
  3. 计算机英语视频教程资源,计算机专业英语视频教程
  4. vpc经典网络区别_vpc经典网络区别
  5. MATLAB语言基础 听课笔记
  6. Python爬虫selenium抓取Xbox
  7. 【1024实战一下】手把手教你打造自己的个人网站,并支持自动发布,添加评论
  8. 超牛逼!100 个开箱即用的 Shell 脚本,拿好了~
  9. 京东计划投资苏州高铁新城用地,11号公告内的3宗地块将正式出让
  10. oracle19c只使用pdb模式,oracle 19c CDB vs pdb 创建