JSBinding + SharpKit / 编译 Cs 成 Js
2016-02-25 22:32
645 查看
轻轻一点菜单:【JSB | Compile Cs to Js】
主要产出:StreamingAssets/JavaScript/SharpkitGeneratedFiles.javascript,你的所有逻辑代码都在这里
其他产出:
Temp/AllInvocations.txt:记录所有逻辑代码对框架代码的调用 (1)
Temp/AllInvocationsWithLocation.txt:同上,但同时记录每个调用的文件名和行号 (2)
Temp/YieldReturnTypes.txt:记录逻辑代码中,所有使用 yield return 后面接的对象的类型 (3)
(1) 没啥用,就是用来看的
(2) 有用,用于后续步骤检查每个调用是否有效。这个能检查90%的情况。如果这个显示 0 errors,基本能跑。但仍然有可能运行时还会报错,毕竟 Cs 和 Js 存在着众多差异。总的来说,有了这个检查,就放心多了。
(3) 有用,跟 (2) 类似的作用。由于 MonoBehaviour 协程是在 Js 手写实现推动的 (因为转换成 Js 后, Unity不可能再推动你的协程),并不支持全部的 yield return 对象类型。目前这个文件只是用查看,暂时没有做检查。如果想深入了解要去看 StreamingAssets/JavaScript/Manual/UnityEngine_MonoBehaviour.javascript。
-------------------------------------------------------------------
传递给skc5.exe的编译符号,可以在 Compiler.cs 里找到。可以注意到,符号包含 UNITY_EDITOR,这里解释一下为什么。首先,Js里是通过给函数加后缀的方式区分重载函数的,比如说有一个类
生成的Js函数名分别是
当你运行 【JSB | Generate JS and CS Bindings】时,代码是在编辑器下执行的,所以当时肯定有定义 UNITY_EDITOR。我们把A的定义改一下:
生成的这2个函数的名字还是
如果 Js 编译器没有定义 UNITY_EDITOR,当你调用 a.f("") 时,他生成的 Js 代码是
因为他以为 f 这个函数是没有重载的,所以不会给他加后缀。结果就是调用失败!
这种情况目前不知道是否存在,反正是有一定的风险的~!
返回:Unity代码热更新方案 JSBinding + SharpKit 首页
主要产出:StreamingAssets/JavaScript/SharpkitGeneratedFiles.javascript,你的所有逻辑代码都在这里
其他产出:
Temp/AllInvocations.txt:记录所有逻辑代码对框架代码的调用 (1)
Temp/AllInvocationsWithLocation.txt:同上,但同时记录每个调用的文件名和行号 (2)
Temp/YieldReturnTypes.txt:记录逻辑代码中,所有使用 yield return 后面接的对象的类型 (3)
(1) 没啥用,就是用来看的
(2) 有用,用于后续步骤检查每个调用是否有效。这个能检查90%的情况。如果这个显示 0 errors,基本能跑。但仍然有可能运行时还会报错,毕竟 Cs 和 Js 存在着众多差异。总的来说,有了这个检查,就放心多了。
(3) 有用,跟 (2) 类似的作用。由于 MonoBehaviour 协程是在 Js 手写实现推动的 (因为转换成 Js 后, Unity不可能再推动你的协程),并不支持全部的 yield return 对象类型。目前这个文件只是用查看,暂时没有做检查。如果想深入了解要去看 StreamingAssets/JavaScript/Manual/UnityEngine_MonoBehaviour.javascript。
-------------------------------------------------------------------
传递给skc5.exe的编译符号,可以在 Compiler.cs 里找到。可以注意到,符号包含 UNITY_EDITOR,这里解释一下为什么。首先,Js里是通过给函数加后缀的方式区分重载函数的,比如说有一个类
class A { public void f(int i){} public void f(string s){} }
生成的Js函数名分别是
f$$Int32 f$$String
当你运行 【JSB | Generate JS and CS Bindings】时,代码是在编辑器下执行的,所以当时肯定有定义 UNITY_EDITOR。我们把A的定义改一下:
class A { #if UNITY_EDITOR public void f(int i){} #endif public void f(string s){} }
生成的这2个函数的名字还是
f$$Int32 f$$String
如果 Js 编译器没有定义 UNITY_EDITOR,当你调用 a.f("") 时,他生成的 Js 代码是
a.f("") // 没有后缀,调用失败!
因为他以为 f 这个函数是没有重载的,所以不会给他加后缀。结果就是调用失败!
这种情况目前不知道是否存在,反正是有一定的风险的~!
返回:Unity代码热更新方案 JSBinding + SharpKit 首页
相关文章推荐
- JS中作用域的问题
- JS中怎么使用EL表达式
- package.json详解
- 编写JavaScript函数解析查询字符串
- ajax 实现 JavaScript与jsp数据的传递
- JSTL应用开发
- HTML,CSS和Javascript综合练习-1
- 160225、解决纯js文件国际化的问题
- JSON.parse()和JSON.stringify()
- JavaScript学习笔记(3)——JavaScript与HTML的组合方式
- jsp 基础知识
- SetInterval()与setTimeout()的区别
- 汉语拼音工具包相关实用方法
- json-c库例子
- JSOI2004 平衡点
- JavaScript
- JsonKit使用方法
- Json字符串查询
- JSONKit在项目中使用设置(ARC与方法更新)
- 文本框只允许输入数字