首页 > Unity3D频道 > 【CSLight研究院】 > CSLight研究院之与uLua的效率对比(三)
2014
08-18

CSLight研究院之与uLua的效率对比(三)

测试环境

1.红米手机一枚。

2.4张1024的Atals图集。

3.脚本中实例化400个UISprite。

4.随机设置UISprite的深度,这样可以让UI的drawCall 数量非常恐怖。

以上参数已经非常恐怖了。如下图所示在电脑上 230个DrawCall 23帧。 测试环境每一张UISprite没1秒随即移动到另外一个位置。所有控制代码均在脚本中完成,我们来分别测试一下 预编译DLL、CSLight、uLua的效率怎么样。

CSLight研究院之与uLua的效率对比(三) - 雨松MOMO程序研究院 - 1

 

 

装红米手机上运行一下看看。预编译DLL 加载400个UISprite耗时 0.16s,运行时帧数 16.83FPS

CSLight研究院之与uLua的效率对比(三) - 雨松MOMO程序研究院 - 2

 

使用CSLight来 加载400个UISprite耗时 0.78s,运行时帧数 13.81FPS

CSLight研究院之与uLua的效率对比(三) - 雨松MOMO程序研究院 - 3

 

使用uLua来 加载400个UISprite耗时 0.53s,运行时帧数 11.87FPS

CSLight研究院之与uLua的效率对比(三) - 雨松MOMO程序研究院 - 4

 

测试结果:

在脚本中调用Unity自身的方法,比如Resource.Load、 Instantiate 、uLua效率要高一些。

但是如果处理脚本与C#之间的来回调用,那么CSLight效率更高一些。

测试到这里,我觉得无论你用uLua还是CSLight都可以进行Unity的热更新,因为它俩效率差不多呵呵。就看你的个人喜好了!

测试代码比较丑,不过能说明问题,因为 C# 的代码和 CSLight的代码完全一样,所以这里我只贴C#和ulua的代码。

C#

 

uLua

UICommon.cs 测试入口脚本,为了公平我分别把这个脚本挂在了三个场景中。每次切场景Unity会自动施放内存,我会根据场景名来动态初始化脚本。

UIEventCommon.cs 用来测试脚本与C#之间的回调,这里每一秒会回调一次。

 

最后是下载地址,欢迎大家在下面给我留言,也欢迎大家一起讨论Unity的热更新。谢谢。

http://pan.baidu.com/s/1o6NWyX8

工程下载完以后,大家可以直接打包装在Android手机上或者IOS上 。iOS我没上真机看,没找到iPhone4,如果你有机器的话帮我测试一下嘿嘿。

我在iPhone5s上看了一下 全程无压力,有iPhone4的朋友帮我看看哦。。

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 雨松,能就ulua和slua在性能和易用性上面简单分析下各自优劣吗?最近项目准备引入热更新,基本上就在这2个之中选一个了

  2. 请问下,使用CSLight只能使用Static的函数,对于Unity提供的Invoke、InvokeRepeating之类的API应该怎么调用呢?

  3. 最近也在开始用slua,但是一直没有找到调试lua的方法,这个很不方便,不知道雨神你是怎么解决的= =

  4. 大大 看你留言说是用SLUA 我也是用SLUA做 能不能做个建议的DEMO 或者写点文章让我也学习一下 谢谢

  5. 雨神, 现在你们项目。用的是C#Light还是uLua。我下载你这个在Unity5中运行,点击运行uLua的时候。Unity直接崩溃了。

  6. MOMO请问一下,ScriptMgr.Instance.LoadProject();中的实现是否在安卓下是有问题的,我看其中用的是System.IO.Directory.GetFiles(Application.streamingAssetsPath。应该怎么处理安卓下的遍历路径内文件呀?

  7. c#light目前还不完善,缺少luajit的安全编译,缺少国内众多游戏公司流行的Protobuffer-lua的动态协议解析,效率还低于tolua c#,所以目前还不具备实用性。选用的人慎用!!~~

  8. CSEvil就是个垃圾,千万别用.写的垃圾脚本解释器,各种不支持,各种崩溃. 跟ulua根本不在一个级别上.

  9. LuaFunction f = UICommon.luaState.GetFunction(“Move”); f.Call();uLua里的LuaFunction需要缓存的,不然每次都会new出一个function出来,你这样对测试结果是有影响的。修正下测试看看呢