You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用嵌入Unity后完全卸载退出并可重新启动的实现方案咨询

iOS集成Unity as a Library实现可重复启停Unity的方案

核心原理

Unity官方提供的quitApplication:方法默认会终止整个宿主进程,只要覆盖AppController的quitHandler回调,就可以跳过默认的进程终止逻辑,同时保留Unity完全释放资源的能力,实现后续可再次启动。

具体实现步骤

  • 第一步:在初始化UnityFramework的地方,获取UnityAppController实例,自定义quitHandler
    Objective-C示例代码:
    #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];
    };
    
    Swift示例代码:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:39:03