前言

写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理解Inventory Pro 2.1.2 这样的插件源码,你还是需有了一部分Unity3D的基础知识。但为什么说你有一定C#开发经验也是能看懂的呢?(有点绕),我想表达的意思是,Unity3D无非是一种技术或者工具,而装备系统是游戏逻辑的一种业务,其实如果侧重点在于业务,技术和工具不是那么重要,希望你能明白这一点。

还有毕竟本人也是新手,对于源码的理解难免有偏差、理解不够透彻的地方,欢迎大家指正和讨论。

本次学习总结的思路大概是从总体到细节的过程,具体是先从装备系统的总体设计,主要功能页,类图结构到最后的关键细节函数实现这个路线。

总体结构

本来想取一些效果截图,发现在5.2.3版本有些部分有编译错误,就不贴出来了

从类图体系来分,就目前阅读该插件的代码部分,结构划分还是很清晰,命名比较规范,注释也很到位(老外确实不一样),基本是有几个类体系结构

物品相关

非UI相关InventoryItem 物品体系类,具体如装备,消耗品,商店物品等

UI相关InventoryUIItemWrapper 物品体系

UI窗口相关

UIWindow体系的窗口类,具体有角色,银行,技能,店铺等窗口

InventoryUIDialog系统下的对话框类,具体有确认框,买卖,通用提示

特殊窗口(非继承体系窗口),如上下菜单,通知窗口等

管理相关类

配置管理

InvertoryManager

ItemManger

数据库操作

其它

应该是一些辅助类,有UI部分的,事件辅助,定义接口等等吧,这部分还没有深入去阅读应该也是挺复杂的

剩下部分

一些第三方插件,Unity3D特性及Edit扩展等等

代码导航图,由于图片大小问题只展开了关键部分的类,感兴趣自己看源码 如下图所示:

具体类图就截取两个充充场面,这里需要注意的由于Unity3D是基于组件开发模式的,有时候可能会出现桥接模式,这样类图如果展现出来会很大,所以这里只是给出了两个比较清晰的继承体系,如下图所示

总结

通读了目前Inventory Pro 2.1.2的源码,对于装备系统有了一个比较直观的了解,大致总结一下

  1. 物品相关,数据模型就是非UI的Item继承体系很容易理解了,就是各种装备,物品,血瓶之类的纯数据,UIItem的UI包装的Item继承体系这个也是很容易理解的,毕竟要用于显示,有名称,材质,动画等等效果了,这些类也比较单纯,比较复杂的是Item的集合类,ItemCollection这样的类,因为简单的增、删和改肯定是逃不了,复杂的如交换,容器间的交换等操作;
  2. UI窗口相关,毕竟装备系统少不了显示,这样就涉及到UI部分的,这样就需要一套通用的UIWindow(窗口类),UIDialog(对话框类),及一些特殊的窗口吧,这些通用的还算简单,复杂的主要是装备容器也就是ItemCollection与窗口UI的组合类,毕竟有很多格子,再复杂一些还有重量和摆放等逻辑;
  3. UI事件相关的,这一部分就复杂一些了,毕竟UI都是事件驱动的,比如物品拾取,销毁,交易,拖拽等都需要事件来做,再加上使用UI引擎相关有碰撞、射线计算,动画效果等等吧,需要对Unity3D还是要有一定了解的,不然一头雾水;
  4. 管理调度及其它,主要是一些辅助的类,这部分也比较多,比如数据库模拟、多语言,声音,全局配置什,集成包装调用什么的也不简单。

整体来说Inventory Pro 2.1.2,还是做的很全面的,还有Demo,毕竟是收费插件,也算是个小型的系统了,至少是提供了一个可行的装备系统解决方案,本来也看过一些国人分享的装备系统程,往往停留在Unity3D UI那层的学习和使用,其实远没有到一个解决方案的级别,基本是入门而已吧。

最后

如果你对本文感兴趣,觉得对你的工作和学习有点用处可以扫二维码打赏,或者残忍忽略。当然如果你有什么问题或者需要指正的欢迎交流。首发博客园,蛮牛

Unity3D 装备系统学习Inventory Pro 2.1.2 总结的更多相关文章

  1. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

    前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...

  2. Unity3D 通用提示窗口实现分析(Inventory Pro学习总结)

    背景 游戏中的UI系统或者叫做GUI窗口系统主要有:主要装备窗口(背包,角色窗口也是一种特殊窗口).确实提示窗口(如购买确认).信息提示窗口(一遍没有按钮,ContexntMenu)和特殊窗口(聊天记 ...

  3. Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)

    背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...

  4. Inventory Pro 装备拾取的实现

    以后都按照插件使用,提出问题,回答问题的方式来进行总结和学习 效果图 1.运行相关的例子,场景中出现4个矩形,这4个矩形是用来模拟物品掉落的包裹,移动Player靠近物品 2.使用鼠标点击物品正方体, ...

  5. 通用窗口类 Inventory Pro 2.1.2 Demo1(下)

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

  6. 通用窗口类 Inventory Pro 2.1.2 Demo1(下续篇 ),物品消耗扇形显示功能

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

  7. 通用窗口类 Inventory Pro 2.1.2 Demo1(中)

    本篇想总结的是Inventory Pro中通用窗口的具体实现,但还是要强调下该插件的重点还是装备系统而不是通用窗口系统,所以这里提到的通用窗口类其实是通用装备窗口类(其实该插件中也有非装备窗口比如No ...

  8. 从一点儿不会开始——Unity3D游戏开发学习(一)

    一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ...

  9. Unity3D for VR 学习(6): 再次温故知新-3D数学

    一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手 ...

随机推荐

  1. display: block; -webkit-margin-before: 1em; -webkit-margin-after: 1em; -webkit-margin-start: 0px; -webkit-margin-end: 0px;

    总的来说:这是CSS3.0的对于文章段P容器的定义方法语句! display:block这个样式,只定义了P容器为一个块; 后面四句是CSS3中的样式定义方法: -webkit-margin-befo ...

  2. 7zip ubuntu使用

    http://www.cnblogs.com/yiwd/p/3649094.html 安装: sudo apt-get install p7zip 解压: 7zr x file -r -o./path ...

  3. C#字符串处理(String与StringBuilder)

    首先介绍一下常用的几个功能:Compare(str1,str2)——比较两个字符串str1,str2的大小,如果大于返回正数,等于返回0,小于返回负数!IndexOf——定位字符串中第一次出现某个给定 ...

  4. sql 将字符串转换为表

    我们常常碰到需要将用户输入之字符串依特定的分隔符转换为表的一个栏位,下面是我写的一个sql函数.如能灵活运用则用途广泛. -- ==================================== ...

  5. 四种读写方案IO流 (JAVA)

    File类用于访问文件或目录的属性 流:指一连串流动的字符,是以先进先出的方式发送信息的通道.程序和数据源之间是通过流联系起来的. 第一套:字节流读取写入方案 FileInputStream :字节流 ...

  6. intellij idea 插件 ideaVim

    像Eclipse一样,idea这个公认最好的javaIDE也有Vim插件. 安装方法 File>Settings>Plugins>Install JetBrains plugin.. ...

  7. c#中enum的用法小结

    转自:http://blog.csdn.net/moxiaomomo/article/details/8056356 enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存 ...

  8. apache本地域名ip重定向vhosts

    apache本地域名ip重定向,使本机通过指定域名访问到指定ip路径. 1.apache配置apache/conf/httpd.conf  : 开启配置 Include conf/extra/http ...

  9. NLP Deep Learning

    http://blog.csdn.net/itplus http://blog.csdn.net/zouxy09/article/details/8775360

  10. coolpro2 剪切并淡出

    1.先将音乐暂停或者停止. 2.选择需要淡出的一段音乐 3.选择效果--波形振幅--渐变 4.选择Fade-out,确定