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游戏热更新方案

posted on 2016-11-11 13:27  AnswerWinner  阅读(573)  评论(0编辑  收藏  举报

导航