JSBinding+SharpKit / 更新的原理】的更多相关文章

首先,其实不是热更新,而是更新. 热更新意思是不重启游戏,但只要你脚本里有存储数据,就不可能.所以只能叫更新. 但大家都这么说,所以... 先举个具体的例子: 如果是C#:在 Prefab 的 GameObject 上绑定 C# 脚本,这个 Prefab 会被打包成 AssetBundle,然后通过 AssetBundle.Load 加载到游戏中. 因为C#本身不可能更新,所以就无法修改. JSB的方案是,将这些 C# 的 MonoBehaviour 都替换成 JSComponent_xxx.这…
目前Unity的代码更新方案有很多,主要以lua为主. JSBinding + SharpKit 是一种新的技术,他做了两件事情: JSBinding将C#导出到 JavaScript (引擎是 Mozilla SpiderMonkey) 中,让你可以用 JavaScript 写代码,就好像 lua 一样 SharpKit(sharpkit.net)将C#代码翻译成 JavaScript 代码. 因此,他可以让你使用C#编译代码,之后一键转换成 JavaScript 代码并正常运行.如果你的项目…
C# 和 JS 都有垃圾回收机制,需要保证 2 者能够分工协作. 类对象 类在C#中是引用类型.我们在 C# 中维护了2个map,保存 C# 对象和 JS 对象的一一对应关系. 举一个例子,看以下代码 // C# List<int> lst = new List<int>(); // JS .ctor(System.Int32.ctor); 从C#返回一个对象到 JS 以及后续的过程是这样的: 1) C# 获得一个表示JS对象的ID. // 文件:System_Collection…
以 NGUI 的 UIEventListener 为例: 有一个类: using SharpKit.JavaScript; using UnityEngine; using System.Collections; [JsType(JsMode.Clr,"../StreamingAssets/JavaScript/SharpKitGenerated/z_temp/test0610.javascript")] public class test0610 : MonoBehaviour {…
首先得深入了解协程的原理.如果还没有完全理解,建议看这篇: http://wiki.unity3d.com/index.php/CoroutineScheduler 另外还要对 JavaScript 的 yield 有所了解,可以看 Mozilla 这篇文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield -------------------------------------…
轻轻一点菜单:[JSB | Compile Cs to Js] 主要产出:StreamingAssets/JavaScript/SharpkitGeneratedFiles.javascript,你的所有逻辑代码都在这里 其他产出: Temp/AllInvocations.txt:记录所有逻辑代码对框架代码的调用 (1) Temp/AllInvocationsWithLocation.txt:同上,但同时记录每个调用的文件名和行号 (2) Temp/YieldReturnTypes.txt:记录…
注意: 1 Firefox 的版本用41 2 我发现调试很难用的,现在我都用打印 步骤参考图:…
从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多余的代码及文件夹 /Scripts/       <-- 因为没有用 /Scenes/       <-- 因为是空的 /Animation/   <-- 因为是空的 /Prefabs/Hellephant.prefab       <-- 因为没有用 /Prefabs/ZomBear…
首先,现在的方案是游戏启动就加载全部的 JavaScript 代码. 先看下 StreamingAssets/JavaScript/ 文件夹下的目录结构:…
运行时出现: Return a "System.Xml.XmlIteratorNodeList" to JS failed. Did you forget to export that class? 答:将这个类加入到 JSBindingSettings.classes 数组后运行一下菜单 JSB | Generate JS and CS Bindings. 特殊情况1:如果这个类并不存在,或者是被 DLL 隐藏了,导致无法添加,那么请添加他的基类.比如上面的 System.Xml.X…
QQ群:189738580 以下是群主维护的JSB版本: git地址:https://github.com/qcwgithub/qjsbunitynew.git插件源码地址(不包含SpiderMonkey源代码):https://github.com/qcwgithub/qjsbmozillajswrap.git 以下是群里 Linka 他们对 JSB 源代码进行改进后的版本(此版本已用于苹果App Store上线产品<仙灵世界>): https://github.com/linkabox/P…
1) 序列化不支持 public List<T>,其余都支持(JSBinding+Bridge无此功能) 2015年11月5日 补充:序列化只处理 Field.目前发现 AnimationCurve 可以在编辑器里编辑,不过他没有 Field,全是 Property,所以不支持,正在想办法 public int v; // 支持 public GameObject go; // 支持 public Transform trans; // 支持 public int[] arrInt; // 支…
最后修改:2015年07月29日 2016年2月25日 2DPlatformer 是 Unity3D 的一个官方 Demo.本文将介绍使用 JSBinging + SharpKit 转换 2DPlatformer 的过程. 本文并不详细介绍每个步骤的细节.因为他们将在其他文章里做详细介绍. 准备工作:首先准备好 JSBinding 的工程,正确导入 JSBinding 插件. 2DPlatformer 是Unity3D的第一个示例代码,一共不到10M.麻雀虽小,五脏俱全.牵扯到很多东西,比如 p…
将 UnityEngine 的代码导出到 JavaScript.就可以在 JavaScript 中使用 Unity 的功能. 如何导出? 将需要导出的类添加到 JSBindingSetting.classes 数组中,然后运行菜单 [JSB | Generate JS and CS Bindings] 即可. 建议是把 UnityEngine.dll 的所有类全部写进去,一次性全部导出,以后就不需要再逐个添加了. 不过以后真正运用到项目中,可能需要各自维护,因为每个项目的需求可能不同. 以后会考…
Serialization of List<T> is not supported. 1 public int v; // SUPPORTED 2 public GameObject go; // SUPPORTED 3 public Transform trans; // SUPPORTED 4 public int[] arrInt; // SUPPORTED 5 public Vector3 v; // SUPPORTED 6 [Serializable] 7 public struct…
本文说明如何往 sln 中添加 SharpKit 工程,以及配置. SharpKit 工程用于将 C# 源代码编译成 JS  代码. QQ群 189738580 1. 安装SharpKit 到 sharpkit.net 下载并安装(6.22MB).或者加群,群文件里有. 2015/08/09修改:请从这里下载 5_4_9 版本(5_4_4版本会有 5000 行 xx 限制): https://github.com/SharpKit/SharpKit/releases…
公司主要项目为CS端,经常遇到客户需求变更及bug处理,在没有引用自动更新之前每次更新程序,必须手动对每个客户端进行更新,这样导致技术支持工作量特别大,也给客户不好的印象,因此我需要一个自动更新程序! 我们实现自动更新大概有这2种实现方式: 一.通过TCP网络通讯的方式,客户端程序监听,当服务端有更新文件的时候,自动比对本地版本,如果服务器版本大于本地版本就可以更新,这种实时性好,不需要等到客户第二次重启的时候才发现有版本更新 二.在服务端部署文件更新服务器,通过Web访问.同样是当服务端有更新…
最近Android社区的氛围很不错嘛,连续放出一系列的android动态加载插件和热更新库,这篇文章就来介绍一下Android中实现热更新的原理. ClassLoader 我们知道Java在运行时加载对应的类是通过ClassLoader来实现的,ClassLoader本身是一个抽象来,Android中使用PathClassLoader类作为Android的默认的类加载器, PathClassLoader其实实现的就是简单的从文件系统中加载类文件.PathClassLoade本身继承自BaseDe…
Unity 是基于组件式的开发,gameObject 身上可以绑定任意个脚本.每个脚本组成 gameObject 的一个部分. 脚本里通过添加预定义好的函数来执行自己的任务.比如Awake,用于初始化,Update用于每帧更新,还有一些跟事件相关的函数. 这些预定义的函数是由 Unity 引擎在适当的时刻自动调用的. 预定义函数的完整列表可以查看 Unity 文档: http://docs.unity3d.com/ScriptReference/MonoBehaviour.html 脚本除了代码…
这个例子相对简单,基本上一路顺畅 // JSBindingSettings.classes public static Type[] classes = new Type[] { typeof(PerTest), typeof(PerTest.RefObject), typeof(Debug), typeof(Input), typeof(GameObject), typeof(Transform), typeof(Vector2), typeof(Vector3), typeof(MonoBe…
现在已经可以编译JSC,目前只能在 Windows 下编译 JSC.这个功能是从 cocos2d-js 抄过来的,他应该也支持在Mac编译,但是我没有试过. 菜单:JSB | Compile all JavaScript to Bytecode 详细用法:待写,先自己看一下这个菜单的源代码吧,就没几句. 一些说明: --------------------------------------------------------------------- 首先,编译 JSC 使用的是 Spider…
已经准备好,google打不开,等打开了再贴图上来…
老版本链接如下:http://www.cnblogs.com/answerwinner/p/4469021.html 新用户不要再使用老版本了. 新版本 JSBinding 将抛弃 SharpKit 转而使用 Bridge.NET(老版本仍然维护). 理由是 1. 把 C# 编译成 Js 后,Bridge 几乎100%确定转换后可运行. Bridge 在编译时不允许引用外部 Dll(System.dll也不行).允许使用的 C# Api 都是 Bridge 已严格测试过的.一般来说,编译能过,就…
前言 前面铺垫了这么久,终于要开始写热更新了. Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新. 资源更新是Unity本来就支持的,在各大平台也都能用.而脚本的热更新在iOS平台则是不被允许的(除了Lua). 为了让一套代码能在各个平台都支持热更,将游戏的业务逻辑全面Lua化,是一种解决方法.这也是ToLua在做的事. 关于Unity热更与平台的关系 可以阅读陈嘉栋大佬的文章:谁偷了我的热更新?Mono,JIT,iOS 一.热更新的原理 1.热更新的简单理解    手机Ap…
文章来源:https://studyidea.cn/java-hotswap 一.前言 一天下午正在摸鱼的时候,测试小姐姐走了过来求助,说是需要改动测试环境 mock 应用.但是这个应用一时半会又找不到源代码存在何处.但是测试小姐姐的活还是一定要帮,突然想起了 Arthas 可以热更新应用代码,按照网上的步骤,反编译应用代码,加上需要改动的逻辑,最后热更新成功.对此,测试小姐姐很满意,并表示下次会少提 Bug. 嘿嘿,以前一直对热更新背后原理很好奇,借着这个机会,研究一下热更新的原理. 二.Ar…
热更新简介 热更新是指在不需要重新编译打包游戏的情况下,在线更新游戏中的一些非核心代码和资源,比如活动运营和打补丁.热更新分为资源热更新和代码热更新两种,代码热更新实际上也是把代码当成资源的一种热更新,但通常所说的热更新一般是指代码热更新.资源热更新主要通过AssetBundle来实现,在Unity编辑器内为游戏中所用到的资源指定AB包的名称和后缀,然后进行打包并上传服务器,待游戏运行时动态加载服务器上的AB资源包.代码热更新主要包括Lua热更新.ILRuntime热更新和C#直接反射热更新等.…
一.前言 - webpack热更新 Hot Module Replacement,简称HMR,无需完全刷新整个页面的同时,更新模块.HMR的好处,在日常开发工作中体会颇深:节省宝贵的开发时间.提升开发体验. 刷新我们一般分为两种: 一种是页面刷新,不保留页面状态,就是简单粗暴,直接window.location.reload(). 另一种是基于WDS (Webpack-dev-server)的模块热替换,只需要局部刷新页面上发生变化的模块,同时可以保留当前的页面状态,比如复选框的选中状态.输入框…
如何评价腾讯在Unity下的xLua(开源)热更方案? Unity 游戏用XLua的HotFix实现热更原理揭秘 腾讯开源手游热更新方案,Unity3D下的Lua编程 [Unity]基于IL代码注入的Lua补丁方案 另类Unity热更新大法:代码注入式补丁热更新 Unity代码热更新方案 JSBinding + SharpKit 首页 五种方案: 1.LUA(需要LUA与C#绑定,性能低,需要掌握两门语言) 2.ILRT(总体最佳方案) 3.JSB(类似LUA) 4.直接更dll(最好方案,但I…
1.利用反射来做Dll更新 这种方式只支持windows以及安卓这种支持JIT的平台,对于IOS就不适用了,IOS这种Full-AOT的平台不支持生成新的代码,因此这种热更方式很少用到.   2.利用lua来做更新 目前这种更新方式是主流,适用于所有平台,lua作为脚本语言,无须编译就能在各个平台运行,常用的lua热更框架有ulua.tolua.xlua.slua.cs2lua等,其中ulua作为开山鼻祖,早已停止更新,逐渐退出主流,最常用的应该还是xlua以及tolua,xlua不仅支持纯lu…