对于一个项目,我需要将Unity3d集成到一个现有的应用程序中,我知道Unity就像一个UIApplicationDelegate。我发现了一篇关于这个主题的有趣的文章,但我真的不清楚如何才能以这种方式解决我的问题。是否可以从ViewController重新启动委派过程?那么,当我从我的代理切换到viewController时,我想要导航回来,然后再次初始化UIApplicationDelegate吗?
我找到的文章:http://alexanderwong.me/post/29949258838/building-a-ios-unity-uiview-uiviewcontroller
提前感谢
发布于 2013-03-06 04:13:45
你有没有尝试过使用Unity构建一个“标准的”Unity iOS应用程序,然后将现有的代码集成到其中?
当您从Unity为iOS构建时,Unity将自动在您的应用程序代理中粘贴一个钩子,方法如下:
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions你可以在那里做其他事情,但在底部你应该看到重要的一行:
[self startUnity:application];所以你能做的就是把这一行从didFinishLaunching方法中去掉,然后把它...你想去哪就去哪。您还需要在应用程序代理中保留对UIWindow* Unity绘制的引用,以便您可以随意切换。
所以,我不完全清楚你到底想做什么,但我绝对建议你首先从一个集成的Unity构建开始,然后从那里开始工作,或者至少在你想要滚动自己的实现时将其用作地图。
发布于 2015-04-27 01:25:42
已经有一段时间了,但迟到总比不到好;)
你不能“重启”委派的东西。UnityAppController是AppDelegate,不是ViewController。但是你可以决定在第一次启动unity的时候。在此之后,unity正在运行,您必须在UnityAppController中使用applicationDidEnterBackground调用(适用于Unity 5之前的版本),或者直接调用setPause:true (使用Unity 5)来停止unity渲染循环。只要你导航回UnityViewController,不要忘了重新激活它。
对于“当你想要时如何启动unity”:要么子类化UnityAppController,然后用一个空实现覆盖startUnity:(UIApplication*)应用程序。然后你调用超级startUnity..一旦你想激活它。
另一种方法不是子类化,而是创建自己的UnityAppController对象并调用所有方法(applicationDidFinsishLaunching等)。然后你只需要等待初始化,直到你第一次需要unity。但我会推荐第一个选项。
您还可以在这里查看我如何做到这一点的更详细的描述:http://www.markuszancolo.at/2014/05/integrating-unity-into-a-native-ios-app
https://stackoverflow.com/questions/12596772
复制相似问题