前言

写在最前面,本文未必适合纯新手,但有一些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. InterBase数据库迁移到MySQL(数据导入)

    在这个脚本中我使用的是Python的ORM框架SQLAlchemy来连接远程的MySQL数据库的,在写这个脚本的时候为了方便参数的输入,我就给之前和这个脚本添加了一个新的功能,就是在调用这个脚本的时候 ...

  2. BZOJ3343: 教主的魔法 分块

    2016-05-28  10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...

  3. FMS发布视频流H.264如何设置

    FMS这个话题由来已久,H.264这个编码格式也由来已久.FMS不叫FMS了,改叫AMS了.因为是Adobe. 今天就说说flash发布流媒体视频,以H.264编码出现的问题.在网上找,大把的关于as ...

  4. java基础--java静态代码块和静态方法的区别、static用法

    转载自: http://blog.sina.com.cn/s/blog_afddb8ff0101aqs9.html 静态代码块:有些代码必须在项目启动的时候就执行,这种代码是主动执行的(当类被载入时, ...

  5. [LintCode] Wiggle Sort 扭动排序

    Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ...

  6. [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字

    17.7 Given any integer, print an English phrase that describes the integer (e.g., "One Thousand ...

  7. Sqoop_ 简单介绍

    一.基本作用 概念: Sqoop被称为协作框架,是在Hadoop.2.X生态系统的辅助型框架,简单说,就是一个数据转换工具,类似的协作框架有文件收集库框架Flume,任务协调框架Oozie,大数据We ...

  8. 伪类link,hover,active,visited,focus的区别

    例一: /*css*/a:link{  color: blue;}a:visited{  color: green;}a:hover{  color: red;}a:focus{ color:blac ...

  9. c#语句 随堂练习2

    1.方程ax²+bx+c=0是一元二次方程,求根. 2.输入一个年份 ,判断是不是闰年.(能被4整除但不能被100整除的年份是闰年,有的世纪年也是闰年) 3.标准体重:男士体重=身高-100±3:女士 ...

  10. document.body.scrollTop or document.documentElement.scrollTop

      用Javascript获取DOM节点相对于页面的绝对坐标时,需要计算当前页面的滚动距离,而这个值的获取又取决于浏览器. 在Firefox或Chrome浏览器的控制台可以查看document.bod ...