Unity3D逻辑热更新,第二代舒爽解决方案,L#使用简介
热更新
天下武功,无坚不破,唯快不破
热更新就是为了更快的把内容推到用户手中。
之前,我设计了C#Light,经过半年多的持续修补,勉强可用,磕磕绊绊。
感谢那些,试过,骂过,用过的朋友,在你们的陪伴下一路走来,也让我更坚定了要把这件事做好的决心。于是就有了C#Light的2.0,L#。
为什么叫L#呢?
因为这次是直接加载解析DLL执行,Load,有一个L
因为直接执行的东西叫做IL,有一个L
因为模拟CLR的工作,有一个L
于是,就有了L#
https://github.com/lightszero/LSharp
欢迎加QQ群223823428探讨:
L#为什么舒爽
上一篇已经解释了工作模式
你可以看到这一次变C#Light的"巧妙"利用VS、mono做语法检查变成真的使用vs、mono来编译
彻底的解决了C#Light语法支持不完整的问题
C#Light设计之初就确定了是c#的语法子集
编写起来,限制诸多,处处掣肘,只保留了C#的形
这一次,L#,形神兼备。而且不止是c#,L#支持C# vb.net unityscript f# boo,只要能编译成dotnet dll就可以
上一篇见这里http://www.cnblogs.com/crazylights/p/4216913.html
上一篇发布之后,L#的接口又做出了一些调整
Github 上有最新的源码https://github.com/lightszero/LSharp
其中有一个ForUnity目录,就是为Unity准备的
已经测试通过了IOS和WP8这两个极端环境
L#在C#Light基础上做出的改进
1.C#light的Context设计不明确
很多人都在疑惑何时该new,为何要new
L#彻底把这个设计修改为ThreadContext,脚本中的线程管理对象,在一个线程上只需要new一次,而且随时ThreadContext.active 就可获取。
以前C#Light 从回调中调用,就只能看到回调一部分脚本堆栈了。
L#修改了这个设计,一个线程上的脚本堆栈全是一体的,即使经过回调也完全可见,经过回调排错不再困难
2.改动了接口结构
更像反射,方便在反射和L#脚本中快速切换
L#的接口结构和反射一致,而且可以直接使用L#的调用方式调用反射。
更添加了快速切换反射和L#脚本的模式,发生难以判断的bug时,可以切到反射模式排查。
在支持反射的平台上,也可以切换到反射模式加速
快速切换的例子,有一个独立测试程序,Test01
3.注册改为可选
C#Light采用了先注册再调用的模式,很多人抱怨不便。
这其实是C#Light设计上的先天困难。
而IL解析DLL执行,DLL中的信息很完整,所以IL默认可以自动完成所有的类型注册
也依然保留手工注册的接口。
4.L#的神器CrossBind
L#设计了一个CrossBind方式,允许脚本直接继承程序中的接口
比如在程序中设计一个
Interface IState
{
void Abc();
}
脚本可以继承此接口,并返回兼容IState的实例给程序
脚本中已经实现了关于迭代器的两个CrossBind
也就是支持在脚本中使用yield语句。
L#的优化空间
很多人都关心L#的性能问题,L#的工作还没推进到那个阶段。
现在在Alpha阶段,欢迎小白鼠加入,一起踩踩坑。
根据目前的少量用户试用反馈,其Bug是比C#Light Alpha阶段少了很多的。
但是L#存在很大的优化空间
- 还有很多阶段有填Cache的空间
- 既然我们是模拟CLR的工作,对IL语句,自然也可以做出类似JIT的优化。
比如a.nop语句完全是浪费时间可以移除
b.stloc ldloc 这种两条连续,参数一致的语句,他的意义是保存变量并加载变量,我们就可以设计一条优化指令,stlocandstayinstack,保存变量并且保留在栈上。
c.很多算术运算都是ld到栈,计算,再存回,只要设计优化的自增运算指令,就可以三条变一条
3.可以考虑 unsafe 或者本地代码的引入
Unity3D逻辑热更新,第二代舒爽解决方案,L#使用简介的更多相关文章
- Unity3d dll 热更新 基础框架
APK包装到用户手机上后,代码如何更新,总不能全用LUA吧?特别是代码非常多的战斗手游 昨晚上有了dll 热更新的想法,今天做了一天的实验,也遇到些坑,这里总结下 工作环境: U3D5.3.2 + v ...
- Unity3D|-XLua热更新用法的大致流程
xlua是由腾讯维护的一个开源项目,我们可以在github上下载这个开源项目并查看一些相关文档 官网:https://github.com/Tencent/xLua 配置文档:https://gith ...
- C#Light Unity逻辑热更新解决方案0.20 发布
之前一直是Beta,这次已经实际运用到项目中间了,去掉beta状态 在项目中使用面对一些新的问题,还有以前没注意的bug. 更新列表 一.增加类中类的支持 二.增加对foreach的支持,同C#语法 ...
- Unity逻辑热更新
http://www.xuanyusong.com/archives/3075 http://www.unitymanual.com/thread-36503-1-1.html http://www. ...
- unity3d 计时功能舒爽解决方案
上次也写了一篇计时功能的博客 今天这篇文章和上次的文章实现思路不一样,结果一样 上篇文章地址:http://www.cnblogs.com/shenggege/p/4251123.html 思路决定一 ...
- 热更新 && 增量更新
Unity中SLua.Tolua.XLua和ILRuntime效率评测 http://blog.csdn.net/u011467512/article/details/72716376 如何阅读lua ...
- Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律. 为何赞叹中文?因为这是一篇针对新手程序员的文字,是一节语文课. 然后来做一下说文解字,也就是 何谓热更新 热更新,每个程序员一听就 ...
- 腾讯开源手游热更新方案,Unity3D下的Lua编程
原文:http://www.sohu.com/a/123334175_355140 作者|车雄生 编辑|木环 腾讯最近在开源方面的动作不断:先是微信跨平台基础组件Mars宣布开源,腾讯手游又于近期开源 ...
- [Unity3D]Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新全然解读
---------------------------------------------------------------------------------------------------- ...
随机推荐
- shell <<EOF
1.考虑下面的需求,在主shell执行命令,进入其他的命令,后面的输入,想作为命令的输入,而不是主shell的输入,怎么办? 2.使用<<EOF,告诉主shell,后续的输入,是其他命令或 ...
- 自动化-Appium
1.手把手教你 Android 标准 APP 的四大自动化测试法宝:https://testerhome.com/topics/5846 2.中文 Appium API 文档:https://test ...
- HTML5之语义标签
在HTML5标准中,新加了几个用于增添页面语义的标签,这些标签有:article.section.nav和aside等.与别的大多数标签不 同,浏览器在解释渲染这些标签的时候仅仅把它作为普通的div块 ...
- 【IOS】Xcode7以上免证书真机调试
Xcode7之前,想要真机调试,必须花99刀购买开发者账号,而且步骤繁琐,需要下载证书.随着Xcode7的推出,大幅度的简化了真机调试的步骤,对ios开发工作者和正在学习ios开发的众多码农们,可以说 ...
- 使用nginx为ArcGIS Server做反向代理
1.下载nginx软件:官网地址http://nginx.org/ 2.修改conf文件夹下nginx.conf配置信息, 配置文件中以下内容: server { listen 80; s ...
- 爱上WPF,努力才会有希望!
从WinForm转向WPF开发已经有两个多月了,通过不断深入地学习与运用,现在是越来越爱它了.它实在是太强大了.运用WPF,你不仅可以做Win界面,也可以很快转向Web开发,因为Silverlight ...
- 两种状态显示处理. enum , Linq AsEnumerable
1.ENUM protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { GridViewRow ro ...
- UI基础之UITextField相关
UITextField *textF = [[UITextField alloc] init]; 1.字体相关 textF.text = @"文本框文字"; textF.textC ...
- jsp页面格式时间yy-mm-dd
这个问题把我花了1小时都没弄出来 各种报错 还是最后同学告知才知道的. 导入 :<%@ taglib uri="http://java.sun.com/jsp/jstl/func ...
- 利用xtraBackup实现不停master服务做主从同步
MySQL主从同步原理: MySQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态 ...