unity3d代码热更新

Including scripts in AssetBundles

–Android

AssetBundles can contain scripts as TextAssets but as such they will not be actual executable code. If you want to include code in your AssetBundles that can be executed in your application it needs to be pre-compiled into an assembly and loaded using the Mono Reflection class (Note: Reflection is not available on platforms that use AOT compilation, such as iOS). You can create your assemblies in any normal C# IDE (e.g. Monodevelop, Visual Studio) or any text editor using the mono/.net compilers.

Note: Loading scripts from asset bundles is not supported on Windows Store Apps and Windows Phone.

//c# example string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d"; IEnumerator Start () { while (!Caching.ready) yield return null; // Start a download of the given URL WWW www = WWW.LoadFromCacheOrDownload (url, 1); // Wait for download to complete yield return www; // Load and retrieve the AssetBundle AssetBundle bundle = www.assetBundle; // Load the TextAsset object TextAsset txt = bundle.Load("myBinaryAsText", typeof(TextAsset)) as TextAsset; // Load the assembly and get a type (class) from it var assembly = System.Reflection.Assembly.Load(txt.bytes); var type = assembly.GetType("MyClassDerivedFromMonoBehaviour"); // Instantiate a GameObject and add a component with the loaded class GameObject go = new GameObject(); go.AddComponent(type); }
  • 编译:把MSIL编译为机器码。编译的时机可以在运行时(JIT编译),也可以在运行前(AOT编译)。
  • 解释:Mono有解释器实现,不过它只用于在移植到新平台时方便运行时和JIT编译器可以并行开发,JIT编译器开发好之后解释器就“退休”了。所以在发布出来的Mono build里都没解释器…(微软自家的CLR也是这个情况)。另外在最新的Mono里解释器已经被彻底去掉了:[runtime] Remove the interpreter. by kumpera · Pull Request #1248 · mono/mono · GitHub

于是对用户来说,Unity带的Mono就是不能配置成解释模式,而必须用编译模式的…

话说题主能补充一下目标使用场景不?
所谓“热更新”代码是类似不通过AppStore下载更新,而直接下载更新代码并反映在应用里么?也就是说是一种部署场景的需求而不是调试场景的需求?

编辑于 2015-03-25 8 条评论 感谢

分享

收藏 • 没有帮助•

举报

作者保留权利

知乎用户,跳入开发大潮的小白
(有11张图,手机党酌情打开)刚好上周CJ上Unity展台开展的技术讲座中有一节就是讲Unity iOS热更新的,照了照片,简单跟大家分享一下,可能稍微有点不对题,大家捡有用的看。首先,正如大家说的,Apple是不允许代码热更新的,Unity也只是给有热更新需求的提… 显示全部
(有11张图,手机党酌情打开)
刚好上周CJ上Unity展台开展的技术讲座中有一节就是讲Unity iOS热更新的,照了照片,简单跟大家分享一下,可能稍微有点不对题,大家捡有用的看。

首先,正如大家说的,Apple是不允许代码热更新的,Unity也只是给有热更新需求的提供一些建议,不会在官方层面提供解决方案,除非Apple放开。

然后讲了Unity热更新的注意点和Unity的几个重要路径

然后是使用Lua进行iOS热更新的总体流程

最后对支持Unity iOS热更新的各种插件进行了对比

后面还有自己写的案例做的性能分析,拿uLua(Asset Store官方商店上的)、uLua&cstoLua(这两个最终肯定会统一)、sLua做对比,照片没拍,总共有六七种情况的对比,总结下来就是uLua(Asset Store)的性能消耗要比uLua&cstoLua和sLua大的多。

作者:RednaxelaFX
链接:http://www.zhihu.com/question/28079874/answer/39316802
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



http://docs.unity3d.com/Manual/scriptsinassetbundles.html


发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

(Spamcheck Enabled)

最新评论