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.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
随机推荐
- ubuntu安装谷歌输入法
1,sudo apt-get install fcitx-googlepinyin 2,在settings->Language Support里将keyboard input method sy ...
- 2016-08-01一起领略ReactJs的风采
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- BZOJ 1040 树形DP+环套树
就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...
- POJ 1274 裸二分图匹配
题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...
- cell 内部 设置width 总不对
今天 在Cell 里设置屏幕宽 如果 在layoutSubviews 使用 self.width(自己写的分类) 或者 self.view.size.width 都可以,这里 4 4s 5 5s 都 ...
- iOS: How To Make AutoLayout Work On A ScrollView
iOS: How To Make AutoLayout Work On A ScrollView Posted on June 11th, 2014 Ok, I’ll admit. I’ve been ...
- NueGet设置package Source
package Source为:http://packages.nuget.org/v1/FeedService.svc/ 最新的地址(2015-4-10):https://www.nuget.org ...
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序 解决方法
最近在搞asp.net.今天在做数据库操作的时候,老发生错误,还以为是自己代码有问题,检查了好久都发现错误. 错误提示: 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程 ...
- (原创)jQuery Media Plugin-jQuery的网页媒体播放器插件的使用心得
jQuery Media Plugin是一款基于jQuery的网页媒体播放器插件,它支持大部分的网络多媒体播放器和多媒体格式,比如:Flash, Windows Media Player, Real ...
- window.loaction和window.location.herf
href相当于打开一个新页面,replace相当于替换当前页面这里打开页面都是针对历史记录来说,在页面上看完全相同,只是浏览器的history表现不同如果在1.html中点击链接到2.html,然后2 ...