Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
东方怂天
xLua
提交
3b99c845
X
xLua
项目概览
东方怂天
/
xLua
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
xLua
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3b99c845
编写于
1月 03, 2017
作者:
J
johnche(车雄生)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
HOTFIX_DEBUG_SYMBOLS的支持
上级
3f08feb1
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
21 addition
and
6 deletion
+21
-6
Assets/XLua/Doc/hotfix.md
Assets/XLua/Doc/hotfix.md
+8
-2
Assets/XLua/Src/Editor/Hotfix.cs
Assets/XLua/Src/Editor/Hotfix.cs
+10
-1
README.md
README.md
+3
-3
未找到文件。
Assets/XLua/Doc/hotfix.md
浏览文件 @
3b99c845
## 约束
为了不影响开发,这个特性默认是不打开的,需要添加HOTFIX_ENABLE宏。
打开后由于il和源代码已经对应不上,所以(双击Unity3D日志)代码会定位到错误的地方,调试功能工作也不正常。
为了不影响开发,这个特性默认是不打开的,需要添加HOTFIX_ENABLE宏。
热更特性依赖Cecil,添加HOTFIX_ENABLE宏之后,可能会报找不到Cecil。这时你需要到Unity安装目录下找到Mono.Cecil.dll,拷贝到项目里头。
打开HOTFIX_ENABLE后由于il和源代码已经对应不上,所以(双击Unity3D日志)代码会定位到错误的地方,调试功能工作也不正常。
打开HOTFIX_DEBUG_SYMBOLS可以解决il和源代码对应不上的问题,但如果在编辑器下运行过后在修改代码,会报Assembly-CSharp.dll.mdb的写冲突错误。
建议的做法是HOTFIX_ENABLE,HOTFIX_DEBUG_SYMBOLS在build手机版本的时候打开,平时编辑器下需要开发补丁的时候打开HOTFIX_ENABLE,开发补丁时需要调试的时候打开HOTFIX_DEBUG_SYMBOLS。
热更特性依赖Cecil,添加HOTFIX_ENABLE宏之后,可能会报找不到Cecil。这时你需要到Unity安装目录下找到Mono.Cecil.dll,拷贝到项目里头。而HOTFIX_DEBUG_SYMBOLS则依赖Mono.Cecil.Pdb.dll。
不支持静态构造函数。
...
...
Assets/XLua/Src/Editor/Hotfix.cs
浏览文件 @
3b99c845
...
...
@@ -127,7 +127,12 @@ namespace XLua
//[UnityEditor.MenuItem("XLua/Hotfix Inject In Editor", false, 3)]
public
static
void
HotfixInject
()
{
#if HOTFIX_DEBUG_SYMBOLS
var
readerParameters
=
new
ReaderParameters
{
ReadSymbols
=
true
};
AssemblyDefinition
assembly
=
AssemblyDefinition
.
ReadAssembly
(
INTERCEPT_ASSEMBLY_PATH
,
readerParameters
);
#else
AssemblyDefinition
assembly
=
AssemblyDefinition
.
ReadAssembly
(
INTERCEPT_ASSEMBLY_PATH
);
#endif
init
(
assembly
);
if
(
assembly
.
MainModule
.
Types
.
Any
(
t
=>
t
.
Name
==
"__XLUA_GEN_FLAG"
))
return
;
...
...
@@ -171,8 +176,12 @@ namespace XLua
}
}
}
#if HOTFIX_DEBUG_SYMBOLS
var
writerParameters
=
new
WriterParameters
{
WriteSymbols
=
true
};
assembly
.
Write
(
INTERCEPT_ASSEMBLY_PATH
,
writerParameters
);
#else
assembly
.
Write
(
INTERCEPT_ASSEMBLY_PATH
);
#endif
Debug
.
Log
(
"hotfix inject finish!"
);
}
...
...
README.md
浏览文件 @
3b99c845
...
...
@@ -8,9 +8,9 @@ xLua为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更
## xLua的突破
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的
突破
是:
xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:
*
Unity3D全平台热补丁技术,可以运行时把C#实现(
整个类,或者单个
方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;
*
Unity3D全平台热补丁技术,可以运行时把C#实现(方法,操作符,属性,事件,构造函数,析构函数,支持泛化)替换成lua实现;
*
自定义struct,枚举在Lua和C#间传递无C# gc alloc;
*
编辑器下无需生成代码,开发更轻量;
...
...
@@ -36,7 +36,7 @@ luaenv.Dispose();
1、DoString参数为string,可输入任意合法的Lua代码,本示例在lua里调用C#的UnityEngine.Debug.Log打印了个日志。
2、一个LuaEnv实例对应Lua虚拟机,
处
于开销的考虑,建议全局唯一。
2、一个LuaEnv实例对应Lua虚拟机,
出
于开销的考虑,建议全局唯一。
C#主动调用lua也很简单,比如要调用lua的系统函数,推荐方式是:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录