Unity上面有什么好的ios热更最新方式新方案

后使用快捷导航没有帐号?
 论坛入口:
  |   |    |   | 
Unity热更新方案探索与讨论
设计思想/框架&
Unity3D/2D&
  文/jazzyzhu
  热更新必要性
  App Store审核周期长
  应用更新频繁
  更新版本对留存数据有很大影响
  Lua相关
  Lua:脚本,解释性语言
  LuaJit:扩展高效版本,支持编译成二进制代码。
  Tolua++:C/C++函数对象转化为lua能调用形式。
  Cstolua:C#函数对象转化为lua能调用形式。
  ulua、slua、unilua以及鹅厂johnche大神的xlua,ulua、slua是比较成型的解决方案,xlua现在起步不久,功能性以及周边不足够完善成熟,但tdr支持很好。性能方面ulua和slua各种较劲,unity官方给了个测试,可参考&上有ulua与其它lua方案的性能比较。
  系统架构
  我选取一种外面很多游戏已经采用的解决方案ulua,并参考了ulua简单框架,针对一般游戏的更新需求,做出UI模块的热更新设计。对于游戏主逻辑,变化很少,主要针对UI系统的热更新。与UI模块相关的有网络、UI资源以及各UI系统逻辑。如图:红色模块使用Lua文件编码,其它使用C#编码。
热更新必要性668.png (40.99 KB, 下载次数: 20)
16:11 上传
  资源:UIPrefab打包成Assetbundle,Lua文件也可以打包成Assetbundle
  资源更新:可用IIPS组件。
  Lua组件:C#与Lua的交互支持系统,详见后面。
  网络:数据进入Model,对于协议的解析在Lua文件中完成,使得可以支持网络协议数据变更。
  UI管理器没有使用Lua,因为它同其他框架性的系统一样,负责管理UI资源的加载、释放、界面层级等,逻辑比较固定。
  热更新流程
  资源更新可使用iips。下面是目前demo的实现。
  资源准备
  UI Prefab资源的各平台打包
热更新必要性1053.png (12.88 KB, 下载次数: 12)
16:11 上传
  Lua文件
热更新必要性1194.png (15.67 KB, 下载次数: 14)
16:11 上传
  更新流程
热更新必要性1334.png (119.22 KB, 下载次数: 13)
16:11 上传
  ULUA技术实现
  将luajit生成各平台的库文件,放到Plugins目录,在Unity启动时加载库使用。
  下面是C#和Lua的交互过程。
  CSToLua
  Ulua新的名字叫tolua,核心思想是利用C#的反射,将C#类代码进行包装,并注册到Lua里。C#和Lua的函数调用是标准C调用(stdcall),使用Lua?API把参数压栈,并调用函数。
  这样Lua代码里能方便的访问C#代码。
  如C#类PanelManager
热更新必要性1685.png (52.73 KB, 下载次数: 11)
16:11 上传
  PanelManager类的包装,将成员变量和函数注册到Lua。但并不包括基类的,所以基类需要另外的Wrap。
热更新必要性1876.png (68.57 KB, 下载次数: 10)
16:11 上传
  Lua中使用PanelManager?=?LuaHelper.GetPanelManager();
热更新必要性2063.png (15.17 KB, 下载次数: 13)
16:11 上传
  C#访问Lua
  框架图中Model是Lua代码编写,在C#中经常会访问Model中的数据。C#访问lua文件的全局变量比较容易,对类对象的访问需要注意。这是因为Lua在面向对象编程方面,比较难以理解,它是通过Lua元表(MetaTable)实现。
  示例:
LuaFunction createObj = luaState.GetFunction(&createObj&);
if (createObj != null)
object[] obj = createObj.Call(&Account&);
LuaTable table = obj[0] as LuaT取lua中创建的对象
double balance = (double)table[&balance&];访问成员变量
Debug.Log(&another & + balance);
LuaFunction func = (LuaFunction)table[&testtable&];
if (func != null)
调用对象成员函数,注意第一个参数是对象引用,类似于this
object[] retVals = func.Call(table,&aaaaa&);
Debug.LogError(&func is null&);
  UI模块设计
  代码框架设计与部分类图:
热更新必要性2794.png (69.94 KB, 下载次数: 31)
16:11 上传
  1、ModelManager、UIManager、LuaBehaviour、ControllerBase加入到Wrap中,使得C#和Lua可以交互调用。
  2、ModelMediater作为ModelManager与GameModel的中间层,在Lua代码中注册所需要Model、维护生命周期、网络数据传输、消息事件机制等。隔离了Model的Lua代码与C#代码,以支持GameModel的动态修改。
  3、UIMananger负责UI的生命周期、显示层级、UI消息分发等。调用LoadUI,加载Prefab资源,然后在gameObject上添加ControllerBase组件。
  4、ControllerBase在Awake时加载对应的Lua文件,初始化与Mono对应的Lua函数,使得Lua代码与Mono的?Awake、Start、Update等统一。把ControllerBase设计成固定的框架文件,隔离了UI系统与C#代码,以支持动态修改。
  5、Controller可以包含多个UIView,在Start时调用UIView的OnInit初始化界面。还可以设计Controller和UIView的消息机制(待定)。
  在ModelMediater和ControllerBase隔离后,UI模块的MVC独立于C#代码,可以实现任意修改。UIPrefab打包成AssetBundle实现更新,如此即可完成UI系统的热更新。
  Demo实现(ULua+NGUI)
  Demo还没有完全按设计完成,主要是Model没有实现。
  1、Assetbundle打包文件以及Lua文件放在StreamingAssets,在Unity导出时包含到应用程序中一起发布。
  2、将AppConst的DebugMode设置为false。程序启动时检查C:?simpleframework的资源,模拟从网络下载;若没有,则从本地的StreamingAssets解压;若有,则检查更新,更新完成后初始化Lua。
  NGUI消息机制:由于可以将C#代码Wrap并注册到Lua,所以Lua代码可以方便的访问NGUI的消息接口。
热更新必要性3849.png (58.12 KB, 下载次数: 11)
16:11 上传
  运行结果:
热更新必要性3992.png (17.49 KB, 下载次数: 9)
16:11 上传
  Call?CSharp按钮点击后,再调用C#代码,验证Lua与C#的相互调用。
  点击Open按钮,调用UIManager打开新的UI对话框MessageBoxPanel。
热更新必要性4217.png (29.94 KB, 下载次数: 12)
16:11 上传
  运行结果:
热更新必要性4358.png (16.64 KB, 下载次数: 10)
16:11 上传
  修改MessageBoxPanel.lua,拷贝到C:?simpleframework?lua?View目录下,模拟更新过程。
热更新必要性4563.png (47.69 KB, 下载次数: 10)
16:11 上传
  客户端启动后比较MD5码更新。运行结果:
热更新必要性4721.png (15.44 KB, 下载次数: 10)
16:11 上传
  Lua调试工具
  1、ZeroBrane?Studio?参见
  2、Lua?Studio?参见
  3、BabeLua-vs2012-and-vs2013插件
  设置参考
  使用技巧&
  这个是集成到visualstudio中的,应该更为方便,但我还没成功试用。。。,请知道的大神不吝赐教。
  Unity的Lua热更新方案很早就有人做了,成熟起来还是自去年开始,现在也越来越多游戏采用了lua。
  说几点Lua缺点来讨论:
  1、团队能力要求对lua有比较深的理解,避免采坑,需要编码规范文档以及注意事项等,对于没有积累的团队,这些知识建档需要从零开始。
  2、编码效率不高,智能提示不完善。如LuaStudio,对于c#运行时注册到lua的类对象以及函数是没有智能提示的,但如果在代码文件中写过了这个接口,LuaStudio是可以扫描到的。
  3、调试堆栈ok的,但这种机制决定了Unity的Profile不能到内部。
  相关阅读:
关注我们官方微信公众号
下载我们官方APP-游戏行
关注手游动态微信公众号
腾讯市值突破5107亿美元 超越Facebook指日那个50万的段子要改么:创业不如买腾讯股票游戏编程中的数学:如何解决任天堂的CodinG五个半月完成研发,动作跑酷手游《刃心》上斗鱼D轮宣布盈利抱紧国资大腿 虎牙持续亏损如何打造高精度的写实类游戏角色
微信扫一扫关注我们→ulua - unity效率最高、最完善的热更新方案!!
uLuaQQ 群:
& [推荐]ULUA/TOLUA插件旗舰店开张!优选正品推荐!
& [原创]uLua/cstolua使用基础!
& [原创]uLua最新Git版地址!
& ULUA ARCHIVE (插件版更新不及时)
-----------------------------------------------------------
- ulua_v1.03 (支持Unity 4.6.1及其老版本)
- ulua_v1.03_with_iOS64_x86到最新版 (支持Unity 4.6.2以上版本)
& OTHER DEMO:
& DEV TOOLS
& uLua编译工程+源代码(全)鏌ョ湅: 4674|鍥炲?: 4
Unity閫昏緫鐑?洿鏂帮紝鍙?兘鏄?渶浼橀泤鐨勮В鍐虫柟妗堬紝L#
褰撳墠绂荤嚎
涓婚?甯栧瓙璐$尞
鍒濈骇UU鏃忊}

我要回帖

更多关于 ios热更最新方式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信