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.模拟毛笔(转) 需求:现在需要准备三种粗细(大中小),并且有五种颜色的比 如果使用蜡 ...
随机推荐
- windows 开机启动 CassiniDev(IIS替代软件)
CassiniDev(IIS替代软件) 使用asp.net的时候,要部署一个iis,或者部署iis express,有时候你嫌麻烦, 这是一个替代品. 功能完全的. 下载地址:http://cassi ...
- 工厂方法模式与IoC/DI
IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 1:如何理解IoC/DI 要想理解上面两个概念,就必须搞清 ...
- PHP 单引号 与双引号区别
在PHP中,字符串的定义可以使用单引号,也可以使用双引号. PHP允许我们在双引号串中直接包含字串变量,双引号串中的变量将被解释而且替换,而单引号串中的内容总被认为是普通字符.例如: $foo = 2 ...
- cocostudio 骨骼动画 setContentScaleFactor
最近在看骨骼动画,看上去挺容易的,但是照着例子做的时候却出现问题了,骨骼之间出现了很大的缝隙,找了很久才发现原来setContentScaleFactor的原因, 出现间隙,是因为各个骨骼是单独在做缩 ...
- asp.net微信jsapi支付
1.前台页面: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"><head ru ...
- iOS多线程学习及总结
能有份网上的存储资料,备以后提升及参考 iOS 多线程编程 简介 一. iOS有三种多线程编程的技术,分别是: 1. NSThread 2. Cocoa NSOp ...
- What is the difference between the ways to implement inheritance in javascript.
see also : http://www.w3school.com.cn/js/pro_js_inheritance_implementing.asp http://davidshariff.com ...
- HDU 4771
http://acm.hdu.edu.cn/showproblem.php?pid=4771 给一个地图,@是起点,给一些物品坐标,问取完所有物品的最小步数,不能取完输出-1 物品数最多只有四个,状态 ...
- CSS3 实现3D旋转木马效果
基本原理: 1.首先我们需要让图片能旋转的效果,我们让所有图片绝对定位(position:absolute),共用一个中心点. 2.对于舞台我们加一个视距,比如下面的demo是 perspective ...
- SFTP交互式文件传输
sftp 是一个交互式文件传输程式.它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性.下边就简单介绍一下如何远程连接主机,进行文件的上传和下载,以及一些相关操作. 举例,如远程主机的 IP ...