iOS应用嵌入Unity后完全卸载退出并可重新启动的实现方案咨询
iOS集成Unity as a Library实现可重复启停Unity的方案
核心原理
Unity官方提供的quitApplication:方法默认会终止整个宿主进程,只要覆盖AppController的quitHandler回调,就可以跳过默认的进程终止逻辑,同时保留Unity完全释放资源的能力,实现后续可再次启动。
具体实现步骤
- 第一步:在初始化UnityFramework的地方,获取UnityAppController实例,自定义quitHandler
Objective-C示例代码:
Swift示例代码:#import <UnityFramework/UnityFramework.h> UnityFramework* uf = [UnityFramework getInstance]; // 此处保留你原有初始化Unity的逻辑 [uf runUIApplicationMainWithArgc: argc argv: argv]; // 覆盖默认退出逻辑,禁止终止宿主进程 uf.appController.quitHandler = ^(int exitCode) { // 销毁Unity承载的窗口 [uf.appController.window removeFromSuperview]; uf.appController.window = nil; // 切回宿主应用的主窗口 [UIApplication.sharedApplication.keyWindow makeKeyAndVisible]; };import UnityFramework guard let uf = UnityFramework.getInstance() else { return } // 此处保留你原有初始化Unity的逻辑 uf.runUIApplicationMain(argc: CommandLine.argc, argv: CommandLine.unsafeArgv) uf.appController().quitHandler = { exitCode in uf.appController()?.window?.removeFromSuperview() uf.appController()?.window = nil UIApplication.shared.keyWindow?.makeKeyAndVisible() } - 第二步:退出Unity时直接调用官方
quitApplication:方法即可,无需再调用unloadApplication[[UnityFramework getInstance] quitApplication:0]; - 第三步:后续需要重启Unity时,直接调用原有首次启动Unity的初始化逻辑即可,Unity会重新加载资源、创建承载窗口。
注意事项
- 需保证Unity项目版本在2019.4及以上,低版本Unity as a Library的quitHandler存在兼容性缺陷
- 若Unity侧有自定义的非托管资源,可以在Unity项目中监听
Application.quitting事件提前完成释放,避免内存泄漏 - 不要同时混用
unloadApplication和quitApplication:两个方法,仅调用quitApplication:即可完成完整的资源释放
内容的提问来源于stack exchange,提问作者Tim Langner
相关产品推荐
相关产品推荐

