轻轻一点菜单:【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里是通过给函数加后缀的方式区分重载函数的,比如说有一个类

1 class A
2 {
3 public void f(int i){}
4 public void f(string s){}
5 }

生成的Js函数名分别是

1 f$$Int32
2 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 首页

JSBinding + SharpKit / 编译 Cs 成 Js的更多相关文章

  1. weex 编译vue成js

    cd 项目 1.开发 npm run web 开发过程中可以直接使用浏览器运行 npm run ios 2.打包 npm run build 会在 dist 文件夹 中生成js文件, 即可拖入ios ...

  2. JSBinding+SharpKit / MonoBehaviour替换成JSComponent原理

    Unity 是基于组件式的开发,gameObject 身上可以绑定任意个脚本.每个脚本组成 gameObject 的一个部分. 脚本里通过添加预定义好的函数来执行自己的任务.比如Awake,用于初始化 ...

  3. JSBinding + SharpKit / 使用 Firefox 调试 JS

    已经准备好,google打不开,等打开了再贴图上来

  4. JSBinding+SharpKit / 菜单介绍

  5. Unity代码热更新方案 JSBinding + SharpKit 首页

    目前Unity的代码更新方案有很多,主要以lua为主. JSBinding + SharpKit 是一种新的技术,他做了两件事情: JSBinding将C#导出到 JavaScript (引擎是 Mo ...

  6. Emscripten编译环境搭建--将C和C++编译成JS

    Emscripten编译环境搭建--将C和C++编译成JS 需求:linux环境下用js执行c.c++文件,使用emscirpten编译器 目标:搭建好Emscripten环境 环境:Ubuntu16 ...

  7. 安装 TypeScript 并编译成JS

    官网: https://github.com/microsoft/TypeScript TypeScript是一种由微软开发的开源.跨平台的编程语言.它是JavaScript的超集,最终会被编译为Ja ...

  8. JSBinding + SharpKit / 实战:转换 Survival Shooter

    从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多 ...

  9. JSBinding + SharpKit / 实战:转换 2DPlatformer

    最后修改:2015年07月29日 2016年2月25日 2DPlatformer 是 Unity3D 的一个官方 Demo.本文将介绍使用 JSBinging + SharpKit 转换 2DPlat ...

随机推荐

  1. java高薪之路__002_异常处理

    自定义异常 package learn.JavaBasics.Class; import java.util.Date; /** * 如何自定义一个异常类 * 1. 继承一个现有的异常类 * 2. 提 ...

  2. picasso-强大的Android图片下载缓存库

    编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! pica ...

  3. Head First 设计模式 --4 工厂模式 抽象工厂模式

    (用到了依赖倒置原则) 我们写的代码中,有的时候可能会出现根据外面给定的不同的参数在方法中根据参数实例化不同的实例,就是会根据不同的参数会new出不同的实例.如果这么写了,这段代码会非常的脆弱,一旦出 ...

  4. Shell重定向文件描述符

    #!/bin/bash      最近在看shell,各种困惑,不过解决困惑的感觉还是很不错的.废话少说,linux中使用文件描述符来标识每个文件对象.文件描述符为一个非负整数,可以唯一标识会话中打开 ...

  5. 【转】 void与void*详解

    void关键字的使用规则: 1. 如果函数没有返回值,那么应声明为void类型: 2. 如果函数无参数,那么应声明其参数为void: 3. 如果函数的参数可以是任意类型指针,那么应声明其参数为void ...

  6. Spring中映射Mongodb中注解的解释

    spring-data-mongodb中的实体映射是通过MongoMappingConverter这个类实现的.它可以通过注释把java类转换为mongodb的文档. 它有以下几种注释: @Id - ...

  7. laravel 中 与前端的一些事2 之使用Gulp编译sass

    下载所有依赖npm的packagist: 下载了前端laravel  elixir编译所需要的全部工具: gulp编译scss文件: scss文件的默认存放位置: 输入命令gulp 开始编译scss文 ...

  8. 关于如何来构造一个String类

    今天帮着一位大二的学弟写了一个String的类,后来一想这个技术点,也许不是什么难点,但是还是简单的记录一些吧! 为那些还在路上爬行的行者,剖析一些基本的实现..... 内容写的过于简单,没有涉及到其 ...

  9. PHP自动发邮件

    自动发邮件 使用了这个类http://bbs.php100.com/read-htm-tid-121431.html 因他用的php版本较老,用到了函数ereg_replace() 和 ereg() ...

  10. public && protected && private

    http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html 1.public继承不改变基类成员的访问权限. 2.priva ...