最近在做 U3D 手游, 已经快要上线, 但发现 IOS 下游戏的代码热更新是一个大问题。
有人推荐使用 LUA, 它确实是一个办法, 但程序已经开发很多, 改为 LUA 代价太大, 暂不讨论。所以想请教下:U3D 游戏在使用 C#-DLL 的前提下, 如何做到 IOS(越狱) 下的代码热更新。
本人以前没有 IOS 开发经验, 如果问题幼稚还希望多多体谅。已经排除掉的方案:
   方案1: 使用 LUA。
       代码量很多, 改动代价太大, 会考虑, 但不在这里讨论了。
  方案2: 使用 monotouch
       不确定 U3D 是否支持 monotouch
以下是我目前得到的一些测试结果:通过分析 U3D  生成的 XCODE 代码, 可以发现 U3D 使用 mono aot 来运行, 并通过 mono_aot_register_module 来注册各 mono_aot_module_<ASSEMBLY NAME>_info。  方案1: 能否让 mono 启用 jit ?
    尝试过直接调用 mono_jit_init 系列函数, 但直接崩溃。 但不知道是方法不对, 还是不支持。  方案2: 能否把 mono_aot_module_<ASSEMBLY NAME>_info 放在 dylib 中, 主程序使用 dlopen 等载入该 dylib,然后注册信息?
    下面是 mono_aot_register_module 的函数注释, 好像是说只支持 statically linked, 但没有测试过。
 /*
 * mono_aot_register_module:
 *
 *   This should be called by embedding code to register AOT modules statically linked
 * into the executable. AOT_INFO should be the value of the 
 * 'mono_aot_module_<ASSEMBLY_NAME>_info' global symbol from the AOT module.
 */
void
mono_aot_register_module (gpointer *aot_info)
  方案3: 把所有 mono/u3d/dll 相关内容, 编译成 game.dylib, 主程序是一个空壳, 负责下载/启动 game.dylib。 该方案貌似可行, 但工作量好像很大, 对于 IOS 不熟悉的我来说, 有点稍微复杂。
由于对 IOS 不熟悉, 上述各种方案, 有可能是可行的, 但方法不对导致失败。 
希望各位大神不惜赐教。

解决方案 »

  1.   

    早几年有接触一些u3d,很久没用了
    你整个应用的架构是什么样的?是不是直接用u3d把整个游戏都做好了,然后导出为xcode项目,直接编译,如果是这样的话直接在u3d里做热更新就行了,我记得u3d都是由每个场景组成的(sence),一个场景做好后可以导出为资源包,然后在u3d里可以直接下载资源包进行更新.
      

  2.   

    U3D 的资源包中只能包含资源, 无法包含代码,所以你说的方式不行。
    可以在资源包中包含脚本如 LUA, 但这里不讨论该方案了。