3

对于一个项目,我需要将 Unity3d 集成到我知道 Unity 充当 UIApplicationDelegate 的现有应用程序中。我发现了一篇关于这个主题的有趣文章,但我并不清楚如何以这种方式解决我的问题。是否可以从 ViewController 重新启动委派过程?因此,当我从我的委托切换到 viewController 并且我想导航回来然后再次初始化 UIApplicationDelegate 时?

我发现的文章:http: //alexanderwong.me/post/29949258838/building-a-ios-unity-uiview-uiviewcontroller

提前致谢

4

2 回答 2

2

您是否尝试过使用 Unity 构建“标准”Unity iOS 应用程序,然后将现有代码集成到其中?

当你从 Unity 为 iOS 构建时,Unity 会自动在你的 Application Delegate 中添加一个钩子,方法如下:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

你可以在那里做其他事情,但在底部你应该看到重要的一行:

[self startUnity:application];

因此,您可以做的就是将该行从 didFinishLaunching 方法中取出并将其放在...任何您想要的地方。您还需要在应用程序委托中保留对 UIWindow* Unity 绘制的引用,以便您可以随意切换进出它。

因此,我并不完全清楚您想要做的事情,但我绝对建议您首先从集成的 Unity 构建开始并从那里开始工作,或者如果您想滚动,至少将其用作地图你自己的实现。

于 2013-03-05T20:13:44.743 回答
0

已经有一段时间了,但迟到总比从不好;)

你不能“重启”委托的东西。UnityAppController 是 AppDelegate,而不是 ViewController。但是您可以决定何时开始统一第一次。之后,unity 正在运行,您必须在 UnityAppController 中使用 applicationDidEnterBackground 调用(对于 Unity 5 之前的版本),或者只调用 setPause:true(使用 Unity 5)来停止统一渲染循环。导航回 UnityViewController 后不要忘记重新激活它。

对于“当你想要时如何启动统一”:继承 UnityAppController 并使用空实现覆盖 startUnity:(UIApplication*) 应用程序。然后,一旦您想激活它,就调用 [super startUnity..]。

另一种方法不是子类化,而是创建自己的 UnityAppController 对象并调用所有方法(applicationDidFinsishLaunching 等)。然后你只需等待初始化,直到你第一次需要统一。但我会推荐第一个选项。

您还可以在这里查看更详细的说明我是如何做到的:http: //www.markuszancolo.at/2014/05/integrating-unity-into-a-native-ios-app

于 2015-04-26T17:25:41.693 回答