您的位置:首页 > 编程语言 > Lua

ToLua SimpleFramework NGUI/UGUI基础知识[1]

2017-04-03 19:08 218 查看

ToLua SimpleFramework NGUI/UGUI基础知识[1]

原文地址:http://doc.ulua.org/default.asp?cateID=4
视频地址:http://pan.baidu.com/s/1gd8fG4N
 
这个基础帖子比较难写,不是因为多么难,而是因为大家的水平参差不齐,基础线难以恒定。有的人已经是Unity大牛,看下框架的使用方式即可,有的人用U3D一两年了,它不需要知道怎么生成包,而有的是第一天才开始学U3D,甚至连Unity导入插件包不能有中文路径都不知道。
 
我们不可能从头教你怎么去学Unity,我们也没空,ULUA的使用人群比其他的热更方案门槛已经低得多,不谦虚的说,得益于群里管理员跟我长时间的业余努力,才做到的。所以ULUA的使用人群的设定范围大体是:
 
(1)至少会用Unity开发程序,基本的Unity的知识要懂。
(2)知道怎么用Unity生成APK/IPA到移动设备上。
(3)知道ULUA的c#与c、c++等原生插件通讯原理。
 
如果上面都不懂,我也不能说让你哪儿凉快哪儿呆着去,至少你得自己百度明白了这些,也不要在群里@群主,我也没空去普及这些东西,作为一个程序员,这些基本的技能都要有,否则还是趁早改行吧。
这个帖子会一直持续更新,直到所有符合以上3点条件的同学都能不需要问我什么关键点的时候为止。
 
框架的定位前期不是一个专业性的游戏开发框架,我在群里多次说过,当时的SimpleFramework只是从我前创业游戏里面剥离出来的部分代码拼凑而成,目的仅仅是为了演示ULUA到底怎么做热更方案,这一点在去年圣典的帖子上已经说过了“很多人不知道怎么用ULUA,所以搞了个演示DEMO”。到后来,这个初衷发生变化的原因是,突然有一天发现很多人已经基于这个DEMO去做游戏了,这个说实话这个出乎我的意料。
 
为了适应大家的使用习惯,在群里我也花时间调研大家使用的开发游戏的架构方式等,后来得出使用PureMVC的同学大多数,为了方便大家直接上手,我也就用相对专业化的方式改造框架,整理、清除不需要的部分等,变成现在的样子。
先看看Unity工程外层两个重要的目录LuaEncoder跟Server是干嘛的:





上面的图是目前SimpleFramework的基本目录结构,而且这个结构短时间内不会发生太多的变化。
我们可以简单介绍下每个目录的用途。
 
Examples :框架自带的Demo例子,如果只需要框架的同学,里面的资源可以删除掉。去“疑难解答”里面查看方法。
 ---Builds:里面都是一些NGUI定义的图集啊、Prefab等资源。用于生成assetbundle而准备的资源。
 ---Editor:里面是例子用到的一个新手引导步骤演示的编辑器脚本。
 ---Editor Default Resource:目录是新手引导步骤对话框用的的图片资源。
 ---Rsources:例子里面用于演示的一个内建的GUI容器的Prefab。
 ---Scenes:里面一个login场景文件,另一个是cstolua自带的性能测试场景文件。(不同版本稍微有些不一样)
 ---Textures:里面是Buidls目录里面图集的原图文件。
 
Lua:框架自带的Lua源码目录,用户自定义的Lua脚本也就是放在这里面,最后打包的时候,打包脚本会将其按目录结构生成到StreaminAssets目录里面去,然后在将其上传到游戏的Web服务器上面,用于准备被每个游戏客户端下载更新他们本地的Lua脚本。达到热更目的。
 ---3rd:里面是第三方的一些插件lua、实例源码文件,比如:cjson、pbc、pblua、sproto等。
 ---Common:公用的lua文件目录,如define.lua文件,一些变量声明,全局配置等,functions.lua常用函数库,通讯的protocal.lua协议文件。
 ---Controller:控制器目录,它不依赖于某一个Lua面板,它是独立存活在Luavm中的一个操作类,操作数据、控制面板显示而已。
 ---Logic:目录里面存放的是一些管理器类,比如GameManager游戏管理器、NetworkManager网络管理器,如果你有新的管理器可以放到里面。
 ---System:这个目录是cstolua的系统目录,里面存放都是一些常用的lua类,为了优化lua调用速度,用lua重写的unity常用类。
 ---View:这是面板的视图层,里面都是一些被Unity调用的面板的变量,走的是Unity GameObject的生命周期的事件调用。
 
Plugins:ulua底层库所在的目录,里面存放的是不同平台的底层库,之所以ulua效率高,就是它是纯c的lua虚拟机,而不是c#解释型的。
 ---Andriod:安卓lua虚拟机底层库,里面分为armv7-a与Intel x86平台。
 ---iOS:里面就是苹果lua虚拟机底层库。
 ---ulua.bundle:里面是Mac机器的底层库。
 ---x86:里面是Win32/Linux32位机器的lua虚拟机底层库。
 ---x86_64:里面是Win64/Linux64位机器的lua虚拟机底层库。
 
Scripts:框架的C#脚本层,之所以这个目录跟lua目录都放在最外层,为了让用户一眼都能找到,明白是什么。
 ---Common:框架的公用定义类。BehaviourBase(行为基类)、GlobalGenerator全局构造器、与luavm通知unity游戏对象的“LuaBehaviour”桥类。
 ---ConstDefine:常量定义目录,AppConst(应用常量)ManagerName(管理器名称)NotiConst(通知常量,用于mvc消息通知)。
 ---Controller:控制器目录,分为Boostraps启动控制器,跟Command常用逻辑控制器。
 ---Framework:经过修改过的PureMVC的框架文件。
 ---Manager:Unity提供基础功能的管理器类,音乐、面板、线程、资源等众多管理器。
 ---Module:PureMVC的模块层,目前里面将Socket作为一个模块代理放到里面了。
 ---Network:网络的常用辅助类,ByteBuffer字节操作封装类,网络协议类,转换器类。
 ---Utility:常用工具类。
 ---View:C#用的PureMVC的视图层。
 
uLua:ulua/cstolua的核心目录,里面还有经过我们修缮后ulua的基础使用例子,用户初学者最佳。
 ---Core:顾名思义,ulua的核心目录,所有c#与lua的交互都是通过它进行调度的。
 ---Docs:ulua自带的文档目录,因为ulua基于LuaInterface,所以这里面就是它的文档。
 ---Editor:这是供cstolua去反射定义Wrap文件列表的工具类目录。
 ---Examples:经过我们修改增加后ulua自带的例子。
 ---Source:这个是cstolua的核心目录,里面有Base核心目录,与动态生成用于存放LuaWrap类的缓存目录。
 
 
上面的目录结构,就介绍到此为止了。既然是热更新游戏框架,接下来我们说下怎么做热更?
其实做热更的步骤不麻烦,因为Unity的c#类部分热更不了,那我们需要热更的就只有Lua代码部分了,当我们写完游戏测试OK了,就可以上线运营,并且在Web服务器上面部署最新的版本资源文件,我们就可以将Lua的代码编码后上传到Web服务器上面去,当游戏客户端启动的时候,它会启动解包流程、解包的资源一般都是当时做包时候的资源,到后面我吗修改以后,它内部的资源可能已经不是最新的了,但是大部分可能是新的,只有少部分需要更新,那紧接着就启动更新流程,从Web服务器上面的资源配置列表里面,通过MD5/CRC比较查询到最新的资源,下载更新本地的文件,达到更新最新版的目的,游戏顺利启动。
 
上面基本上就是热更的指导思想了,SimpleFramework框架也基本上以此思路在运行的,如果还不清楚的话,可以看下图:
 




 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity tolua 热更新