大三开始接触U3D,工作后又转去Cocos。最近工作室想要攻坚一下U3D,于是又重新接触了U3D开始做demo。花了4个月,学习加制作完了一个mmo的demo,刚做完移动和战斗同步,当然,资源都是现成的。然而,突然接到通知后面立的项目应该是3D卡牌,得,重头在来吧。准备按进度慢慢更新,记录一下整个制作demo过程的设计和心得,也趁这个机会把之前demo制作中设计的很烂的部分和遇到的问题重新改一遍,加油。之前mmo demo的心得也慢慢记录到博客里,先给自己挖几个坑。
3D卡牌客户端技术方案:
开发工具: Unity 2017.2.0f3
开发语言: C#(实现基础框架,网络库以及控件支持)+ Lua(业务逻辑)
UI:FairyGui(谷主大神开发,编辑器适合设计人员直接使用,减少前段开发量)
(原生生成是Xml格式,后续可以考虑制作成二进制文件,优化读写)
网络协议: Protobuf
C#和Lua交互: ToLua
资源格式: ab包 lz4
内更新以及Patch机制:版本递增增量更新,Patch考虑使用推送Lua代码的格式,动态修改内存中的lua table。
注释规范: Lua就按照LuaDoc的注释规范来
具体设计:
C# 层:实现启动类,网络层,内更新方案,资源加载以及Lua设置GameObject属性的接口。
Lua层:core+game+utils (core为框架(实现基类),game游戏层,utils常用函数层(搬过来的轮子))
core = Base(基类,如BaseScene,场景基类)+常用工具类(如eventSystem,对象池这种)
game = n* Element(要素,实现功能的非UI要素)
+ n* Module(游戏模块,由于是卡牌,主要以UI为主)
+ Global(全局变量和函数)
---------------------------------------------------------------------------------------------------------
Element(以Scene举例) = SceneManager(管理场景单例) + SpecialScenes(基于BaseScene的各种实现)
Module = Controller (管理器,声明使用data/proxy/view等,和其他模块的依赖关系,可以访问anything)
+ Data(模块数据,提供模块数据类型和数据接口,data不可主动访问别的任意内容)
+ View(UI界面,可以和管理类交互,可以访问修改data,可以访问proxy)
+ Proxy(网络交互,收发协议,可以访问修改data)
+ Const(常量,试实际情况考虑是否可以和data合并)
(一个模块除了Controller,别的均可以缺省)
(文件之间交互无直接访问权限是均使用eventSystem)
Global = GlobalVar+GlobalFunc(就这两文件就OK了,由于Lua太随意了,所以通过__newIndex方法杜绝其他地方写入global)
由于还没开动,纯脑补,先写这么多,后续试实际开发修改设计结构(无特殊情况应该不改了,flag)