JSBinding+Bridge.NET限制
限制:
- 框架代码不可以访问逻辑代码。这是最基本的。
- 框架里的函数 f 带数组参数时,逻辑代码调用 f 的话,数组只能做为输入,也就是说,如果在框架函数 f 里修改了数组的内容,那么逻辑代码是无法取得新内容的。这是为了性能考虑。
- js<->cs 交互时,数组只支持一维
- 纯逻辑对象不可以传递到框架代码中。例如 List<> 对象。
- 反射相关代码,部分支持。具体看你咋用,有时候是可以的,Bridge 在 Js 模拟了一套类型系统。可以看编译成 Js 时有没有报错,如果没报错,应该就可以的,但是只能是对逻辑代码里的类型使用。
- 支持协程,但是需要自己推动协程
void Update() {
this.UpdateCoroutines();
}
- 不支持 yield break。以后也不会支持,因为 Js 中没有对应的语法。
- yield return 后接的对象类型有限制,支持的有(详细细节可查看UnityProjJs\Assets\StreamingAssets\JavaScript\Manual\UnityEngine_MonoBehaviour.javascript):
yield return new WaitForSeconds(...);
yield www;
yield return AsyncOperation(...)
yield return 另一协程,例如 StartCoroutine(...);
yield return null;
yield return 0;
- 逻辑代码不可以继承框架代码,不可以直接调用框架代码的 Delegate。因此如果是现有项目要改造,首先要做的就是划清逻辑和框架的界限。
- 在逻辑代码中操作 byte[] 极有可能会错,应尽可能避免,最好不要操作。
关于泛型
首先,在逻辑代码中,最优先使用Bridge自带的泛型类。什么是Bridge自带?就是你可以不导出,直接在Bridge工程中使用的类。ClientJs/Assets/Scripts/JSBinding/Editor/BridgeType.txt 里有所有 Bridge 自带的类。
列举几个常见的:List<>,Dictionary<,>,DateTime。
如果要用到某个泛型类,但是Bridge没有,怎么办?首先,导出框架代码的泛型类是支持的。但是,使用导出的泛型类性能极差,因为每个调用都是反射。如果是偶尔使用,可以接受。如果是频繁使用,则不推荐。比如说容器内一般使用频率很高,则不推荐导出,比如Queue<>,HashSet<>。建议是,自己实现。比如说自己写一个MyQueue,里面包一个List。这样MyQueue是纯逻辑代码,性能好。
返回主页:JSBinding+Bridge.NET:Unity游戏热更新方案
JSBinding+Bridge.NET限制的更多相关文章
- JSBInding+Bridge.NET:把C#编译为Js
编译步骤: 1. 用 VS 2015 打开 BridgeProj/BridgeProj.sln ,编译 2. 将生成 BridgeProj/Bridge/output/bridge.js,对应于 Br ...
- JSBinding+Bridge.NET:生成绑定(导出)
将框架代码导出到 JavaScript.就可以在 JavaScript 中调用 框架代码 的功能. 注意,这个功能是在 Js工程中做的,Cs工程没有这回事. 如何导出? 1. 将需要导出的类添加到 J ...
- JSBinding+Bridge.Net:框架代码与逻辑代码的关系
在JSB+Bridge工程中你可以同时维护Cs版本和Js版本的游戏. 框架代码:简称framework,表示那些不进行热更的代码.注意,这包括你自己写的代码,也包括引用的Dll,比如UnityEngi ...
- JSBinding+Bridge.NET:Unity游戏热更新方案
老版本链接如下:http://www.cnblogs.com/answerwinner/p/4469021.html 新用户不要再使用老版本了. 新版本 JSBinding 将抛弃 SharpKit ...
- JSBinding+Bridge:逻辑代码中操作二进制数据
以这2个函数为例 class File { public static byte[] ReadAllBytes(string path); public static void WriteAllByt ...
- JSBinding+Bridge.NET:Inspector拖变量支持
之前的文档说了,JSB的设计是不允许gameObject上挂逻辑脚本的.原因很简单,在Js工程中根本就不存在C#形式的逻辑脚本,如果在Cs工程中挂上了,到了Js工程这边,直接Missing. 实际在使 ...
- JSBinding + SharpKit / 需要注意及不支持的列表
1) 序列化不支持 public List<T>,其余都支持(JSBinding+Bridge无此功能) 2015年11月5日 补充:序列化只处理 Field.目前发现 Animation ...
- Unity代码热更新方案 JSBinding + SharpKit 首页
目前Unity的代码更新方案有很多,主要以lua为主. JSBinding + SharpKit 是一种新的技术,他做了两件事情: JSBinding将C#导出到 JavaScript (引擎是 Mo ...
- PHP设计模式(八)桥接模式(Bridge For PHP)
一.概述 桥接模式:将两个原本不相关的类结合在一起,然后利用两个类中的方法和属性,输出一份新的结果. 二.案例 1.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
随机推荐
- rails 常用的验证方法 validates (转)
Agile Web Development with Rails 17.4 validation validate 在save的时候激活validate_on_create ...
- Java中文件的随机读写
[例 10-12]模仿系统日志,将数据写入到文件尾部. //********** ep10_12.java ********** import java.io.*; class ep10_12{ pu ...
- 2016年Q2《网络安全创新500强》榜单解读
近日,美国投资咨询机构Cybersecurity Ventures发布了2016 Q2<网络安全创新500强>企业榜单,新兴安全公司root9B异军突起,国内4家企业上榜. 关于Cyber ...
- [软件架构]模块化编程思想及(C++)实践
Repost 内容简介: 模块化思想 模块的构成 模块的管理 模块化实践 定义模块结构 声明模块对象 定义模块列表 模块列表对象 模块化思想 1. 将系统分成很多的模块,模块内部关注自身需要实 ...
- spring mvc 跳转后页面cs样式表丢失
原因:../不能正确返回 解决办法:jsp文件加<% String path = request.getContextPath(); String basePath = request.getS ...
- [转]jq选择器
jQuery-强大的jQuery选择器 (详解)[转] 1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 ...
- overflow属性
css属性overflow属性定义溢出元素内容区的内容会如何处理.如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制. 参数是scroll时候,必会出现滚动条. 参数是auto时候,子 ...
- C#使用QQ邮箱发送邮件
首先要开通QQ邮箱的STMP服务.QQ邮箱——设置——账户——开启SMTP服务. 需要引用: using System.Net; using System.Net.Mail; using System ...
- 世界超强完美DIY 电子奇才五年全手工制作CPU
世界超强完美DIY 电子奇才五年全手工制作CPU 2015-07-08 极客范 (点击上方公众号,可快速关注我们) 在如今越来越靠程序化.流水线作业来完成生产的制造业中,想找一件手工打造的产品,真是越 ...
- Android 媒体存储服务(二)
Android 媒体存储服务 简介: 本文是<深入Android媒体存储服务>系列第二篇,简要介绍媒体存储服务扫描文件的流程.文中介绍的是 Android 4.2. Android 有一套 ...