Unity 游戏黑暗之光笔记第五章 背包系统的实现
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 游戏黑暗之光笔记第五章 背包系统的实现相关推荐
- Unity 游戏黑暗之光笔记第四章 任务系统的实现
Unity 游戏黑暗之光笔记 第四章 任务系统的实现 具体步骤可以看RPG游戏<黑暗之光>流程介绍与代码分析之(四) 注意要点 在把鼠标放在任务面板上点击时,为了让角色不移动,在Playe ...
- Unity 游戏黑暗之光笔记第一章 完善场景
Unity 游戏黑暗之光笔记 第一章 完善场景 1. 导入资地形.地貌资源,新建场景,导入地形.地貌prefab 2. 设置相机与视野匹配 选中主摄像机,点选菜单栏中GameObject > A ...
- 《Python从入门到实践》读书笔记——第五章 if语句
<Python从入门到实践>读书笔记--第五章 if语句 1. 一个简单示例 cars = ['audi', 'bwm', 'subaru', 'toyota']for car in ca ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_/*<深入理解C指针>学习笔记 -- 第五章*//*不应该修改的字符串就应该用 co ...
- [云炬创业基础笔记]第五章创业机会评估测试2
[云炬创业基础笔记]第五章创业机会评估测试1
- 《Go语言圣经》学习笔记 第五章函数
<Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...
- 《金融学》笔记 第五章 金融市场
<金融学>笔记 第五章 金融市场 前言 在<<金融学>笔记>中开了一个头,现在完善具体细节. 金融范畴篇 第一章 货币的本质 第二章 货币制度 第三章 信用.利息和 ...
- HTML5 2D游戏引擎研发系列 第五章
HTML5 2D游戏引擎研发系列 第五章 <Canvas技术篇-画布技术-纹理集复杂动画> 作者:HTML5游戏开发者社区-白泽 转载请注明出处:http://html5gamedev.o ...
最新文章
- 对c语言这门课程的认识,一路走来,浅谈c语言的学习感想
- Python完全学习大师班
- 今天我们来聊一聊 Spring 中的线程安全性
- 咱们来聊聊快速失败和安全失败
- 2008年北大核心有效期 计算机类核心(2011-01-31 15:02:46)
- oracle如何查询系统变量数据,Oracle如何对IN子查询使用绑定变量(转)
- 我在编写《微软System Center 2012 R2私有云部署实战》中应用的一些小技巧
- python如何并发上千个get_Python拓展21(python3X之百万并发借鉴)
- 苹果官宣:这届“春晚”,好早!
- 【报告分享】2020年中国人工智能商业落地研究报告.pdf(附下载链接)
- IDEA安装“Translation”插件
- Android开发之onCreate
- Android ListView观察者模式的应用
- 编程基础(二)——汇编
- Linux系统重要日志文件
- 20行Python代码爬取王者荣耀全皮肤
- emu8086的入门使用
- 老飞飞魅力飞飞关于攻击辅助研究带易语言源码视频教程
- msg文件转成html文件,如何将MSG格式的文件转换为PDF格式文件?
- tensorflow入门教程(二十六)人脸识别(上)