IOS(越狱)下 U3D 游戏 C#-DLL 的代码热更新 是否可行?

hproof 2014-08-09 02:36:52
最近在做 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 不熟悉, 上述各种方案, 有可能是可行的, 但方法不对导致失败。
希望各位大神不惜赐教。
...全文
602 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ssttyyuu 2014-12-17
大神 最后可有进展?
  • 打赏
  • 举报
回复
hproof 2014-08-09
引用 1 楼 disburden 的回复:
早几年有接触一些u3d,很久没用了 你整个应用的架构是什么样的?是不是直接用u3d把整个游戏都做好了,然后导出为xcode项目,直接编译,如果是这样的话直接在u3d里做热更新就行了,我记得u3d都是由每个场景组成的(sence),一个场景做好后可以导出为资源包,然后在u3d里可以直接下载资源包进行更新.
U3D 的资源包中只能包含资源, 无法包含代码,所以你说的方式不行。 可以在资源包中包含脚本如 LUA, 但这里不讨论该方案了。
  • 打赏
  • 举报
回复
不担心 2014-08-09
早几年有接触一些u3d,很久没用了 你整个应用的架构是什么样的?是不是直接用u3d把整个游戏都做好了,然后导出为xcode项目,直接编译,如果是这样的话直接在u3d里做热更新就行了,我记得u3d都是由每个场景组成的(sence),一个场景做好后可以导出为资源包,然后在u3d里可以直接下载资源包进行更新.
  • 打赏
  • 举报
回复
发帖
iOS

2.8w+

社区成员

主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
帖子事件
创建了帖子
2014-08-09 02:36
社区公告
暂无公告