Unity热更新方案(uLua vs sLua)

首先附上这两个项目的地址,这两个项目都是比较完善的lua解决方案,从效率和使用方式上说都不相伯仲,我最终选择了ulua,但是并不是说其具有压倒性优势。

uLua:http://ulua.org/index.html

sLua:https://github.com/pangweiwei/slua

引入lua,基本上就是为了热更新,不过后面苹果似乎对lua脚本的热更新也限制的很严格,拿脚本做热更新也要偷偷摸摸的去做。所以说我一贯的观点是游戏框架设计的合理些(比如技能、界面中可以用配置的,尽量不要硬编码),代码稳定些,多做些测试,不要总想着上线后再去修正什么致命bug。正常情况下,我们需要频繁更新的,应该是游戏资源或者是策划数值。我们新增一个功能或者一批界面的时候,进行一次全包的版本更新是合情合理的。玩家想玩新功能就去更新,不想玩新功能就不去更新,这样不会对现有玩家造成什么大的影响。反之,如果从来不考虑向前兼容,比如一个消息随便修改字段含义,或者打乱消息结构而又没有合理使用protobuf,那么就是游戏代码设计的不合理。

从开发效率上说,我反而认为c#写起来更顺手一些, 代码维护性也更强一些,毕竟地球上没有哪个IDE比vs更懂c#。从运行效率上说c#比最快的lua方案也要快50倍左右。

基于此,我对lua的使用是,将其限定在有限的模块内,让lua为游戏服务,而不是让游戏为lua妥协。这个跟cocos2dx+lua还不一样,毕竟合格的c++开发者很难招,并且开发效率跟脚本语言也没法比,作为2D游戏,绝大多数情况下lua的运行效率也满足需求。举个例子,界面部分可以用lua,基本上一个界面就是一个UI的prefab加上一个lua脚本。新手引导部分也可以使用lua,因为这个太有可能频繁改动了。任务部分可以考虑使用lua,这个变化性会比较大,并且不太可能频繁调用到。

再说解决方案的选择,候选方案有三个uLua  sLua和L#。其他如unilua,个人感觉不是很完善。上面提到的三个无论从完善程度,还是运行效率都是符合需求的。

L#,感觉玩的有些脱了,没有特别关注,如果使用c#作为脚本,我其实宁愿放弃代码热更新,而在游戏框架上面多下一些功夫,一样可以满足大多数更新需求。

sLua和uLua的使用方式是类似的,效率上也差不多。这里要注意uLua要使用最新版本,因为早期的uLua是使用反射机制,脚本的运行效率比较糟糕。而新的uLua集成了cstolua,它的实现原理跟sLua类似,预先生成一批代码把Unity的类和函数导出给lua,然后lua再调用,这样无论是效率还是GC的角度上说都是比较完美的。

sLua有一篇benmark http://www.sineysoft.com/post/164  它展示了sLua的性能。但是我实际测试发现,最新版本的uLua其实很多情况下要比sLua还要快,可能快一倍左右。比如,循环200W次调用  v = Vector3(i,i,i)  。uLua消耗平均时间是0.7秒,而sLua时间则是1.4秒,c#原生调用为0.06秒。
具体时间可能跟平台和机器相关,不过从理论(实现思路)和实际结果来看,uLua并没有性能上的劣势。

在使用上,可以参考这篇文章:http://blog.csdn.net/neil3d/article/details/44200821   相关的教程很多,也就没有太多可以啰嗦的了。

时间: 2024-10-12 11:51:17

Unity热更新方案(uLua vs sLua)的相关文章

我使用的 unity 热更新方案 JSB(求小编 推荐一下)

今天周五 ,明天没有什么事情,可以安心写一些博客. 今天聊 两个话题 一 , unity热更新的窘境 二 ,我所使用的unity 热更新方案JSB ======================================热更新的窘境============================================= (1)其实unity 热更新到瓶颈是 ios 的 系统本身 ,禁止你 jit .说白了,内存中代码,系统本身不让你执行. 安卓 系统,桌面 系统,本身都支持 动态直接替换d

unity 热更新 c# 实战经验分享(二) - 动态Protobuff协议,再也不用担心为了换条协议换包了 ~~!

先提前说明一下,如果哪位小伙伴 觉得生疏的话,可以看这篇博客的前面两个博客,里面讲述了 高大上 JSB,unity 热更新方案,用强大的宇宙第一编辑器vs 来开发 unity 热观更新脚本,更新c# 不在是梦 这次的demo 工程我已经长传了,地址 在这里http://pan.baidu.com/s/1qWQlXUW:下载后(放在D盘 放在D盘 放在D盘!!!!)里面的unity 工程直接打开然后运行main 场景 .就会出现下图,这篇博客唯一 的意义就在于这个demo,实战就是实战不跟你讲废话

Unity官方公布热更新方案性能对比

孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ?  什么是热更新 ?  为何要热更新 ?  如何在iOS 上对Unity 应用进行热更新 ?  支持Unity iOS 热更新的各种Lua 插件的对比 什么是热更新 ? 广义定义 ? 无需关闭服务器,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码. ? 狭义定义( iOS热更新) ? 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即

Unity官方发布热更新方案性能对照

孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ?  什么是热更新 ?  为何要热更新 ?  怎样在iOS 上对Unity 应用进行热更新 ?  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 ? 广义定义 ? 无需关闭server,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码. ? 狭义定义( iOS热更新) ? 无需将代码又一次打包提交至AppStore,就可以更新clien

Unity热更新专题(六)uLua简介

Unity热更新专题(六)uLua简介 Unity热更新的解决方案中,uLua无疑是比较好的一种. 所以我们先来介绍一下uLua. 之前文章提到的Lua以及LuaInterface的学习,都是为了学习uLua来做基础的. 关于uLua的学习,我们可以参考官网,以及官方bbs来学习.上面有详细的视频文字教程. 官网:http://www.ulua.org/index.html 官方bbs:http://bbs.ulua.org/ 学习uLua有以上资料就够了. ==================

C#最良心脚本语言C#Light/Evil,Xamarin\WP8\Unity热更新最良心方案,再次进化.

C#Light的定位是嵌入式脚本语言,一段C#Light脚本是一个函数 C#Evil定位为书写项目的脚本语言,多脚本文件合作,可以完全用脚本承载项目. C#Light/Evil 使用完全C#一致性语法 目前 C#Light已经是正式版,且经商业项目检验 C#Evil是Alpha版,欢迎试用反馈. C#Evil在C#Light的基础上 从底层支持了面向对象,请注意下面是脚本代码 不同于C#Light没有函数和类的设计,(C#Light只是用C#LightFramework来模拟整个cs文件的识别,

Unity3D热更新方案网摘总结

参考:http://blog.csdn.net/guofeng526/article/details/52662994 http://blog.csdn.net/u010019717/article/details/50853207 "热更新"这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技术,我们姑且这么叫它,相信很长时间内,大家依然还会这么叫,甚至有人叫它"暖更新". 一.什么是热更新? 广义定义 无需关闭服务器,不停机状态下修复漏

unity3d的资源管理和热更新方案

之前开发一直使用cocos2dx,最近开始搭建unity3d的框架,遇到的一个大问题就是热更新.虽然代码采用了slua脚本,unity3d官方也提供了assetbundle这样的解决方案,但是还是有好多的问题需要解决. 1.复杂的资源引用方案.cococ2dx的更新方案很简单--添加附加searchpath,这样只要设置更新文件所在的路径,就能保证优先使用最新资源.但是unity3d并不是这样,因为它没有cocos2dx的FileUtils,没办法控制所有资源的加载.unity3d的资源来源有这

unity 热更新思路和实现

声明:本文介绍的热更新方案是我在网上搜索到的,然后自己修改了一下,相当于是借鉴了别人的思路,加工成了自己的,在此感谢无私分享经验的朋友们. 想要使用热更新技术,需要规划设计好资源比较策略,资源版本,确保增加新资源后可以下载到本地,有资源更新的时候可以替换掉本地旧资源.我在前面写了一篇"unity 打包AssetBundle"的文章,里面生成了一个资源版本文件,不多解释了,上图.至于怎么生成这个文件的,可以看一下我前面写的文章. 废话不多说. 先介绍热更新步骤,后上代码 步骤一.在Res