前言

写在最前面,本文未必适合纯新手,但有一些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. 【BZOJ3122】【SDoi2013】随机数生成器

    Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数.   接下来T行,每行有五个整数p,a,b,X1,t,表示一组数据.保证X1和t都是合法的页码. ...

  2. db2工具优化

  3. 最好的文本框样式 最漂亮的文本框样式 textbox css样式

    输入框景背景透明: <input style="background:transparent;border:1px solid #ffffff"> 鼠标划过输入框,输入 ...

  4. java判断文件是否存在

    1.判断远程服务器上文件 import java.net.HttpURLConnection; import java.net.URL; public boolean checkRemoteFile( ...

  5. Hibernate的一级二级缓存机制配置与测试

    特别感谢http://www.cnblogs.com/xiaoluo501395377/p/3377604.html 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session ...

  6. zju(1)嵌入式开发环境构建

    1. 实验目的 搭建嵌入式开发环境,安装ubntu,编译交叉工具链,安装配置tftp,nfs.用makefile 编译几个文件,在实验台上运行. 2. 实验内容 1) 安装ubuntu12.04 2) ...

  7. sql替换指定字段指定字符串

    REPLACE ('字段','string','newstring') UPDATE dw_site SET username =REPLACE (username,'凯鋆','韩优')

  8. 20145334 第五次 java 实验报告

    实验内容 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.设计安全传输系统. 我和20145306张文锦组队编程 http://www.cnblogs.com/besti145306/ ...

  9. 20145337实验四Android开发基础

    20145337实验四Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件处 ...

  10. Python字符串,元组、列表、字典

    1.字符串 <string>.strip() 去掉两边空格及去指定字符 <string>.split() 按指定字符分隔字符串为数组 <string>.isdigi ...