欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

从iOS应用中,启动一个Unity App

发布时间:2024/9/30 编程问答 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 从iOS应用中,启动一个Unity App 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Start a Unity app from inside a native iOS app

1. 首先,从Unity中将Unity项目导出Xcode工程。(因为Unity生成的工程目录比较麻烦,没有研究,所以从Unity生成工程的基础上进行开发)

2. 生成的Xcode工程包含以下文件。

  其中main.mm文件,是项目的入口文件。

  从代码来看。Unity是使用红色框中的文件(AppController)启动,没有用到蓝色框中的文件。所以我们可以直接使用(iPhone_targer2AppDelegate)

   

3. 修改入口文件,main.mm

  将启动类,由“AppController”改为“NSStringFromClass([iPhone_target2AppDelegate class])”

NSAutoreleasePool * pool = [NSAutoreleasePool new]; //  UIApplicationMain(argc, argv, nil, @"AppController"); UIApplicationMain(argc, argv, nil,  NSStringFromClass([iPhone_target2AppDelegate class])); [pool release];

4. 在“iPhone_target2AppDelegate”中,就可以正常的使用我们iOS项目了。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];     [self.window setRootViewController:[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]];     [self.window makeKeyAndVisible];           return YES; }

5. 接下来就是本文的重点了,怎么启动Unity项目呢。

[[[AppController alloc] init] startUnity:[UIApplication sharedApplication]];

6. 从Unity项目退出,返回iOS项目。在AppController.mm中加入对Unity的响应,代码如下

  这里使用了Unity和Object-C之间的代码交互。详见:http://alexanderwong.me/post/29861010648/call-objective-c-from-unity-call-unity-from

extern "C" {     float doExitSelector()     {   /*          // 使用这个代码会导致应用Crash          // ReleaseViewHierarchy();          // UnityCleanup();          */                   // 所以在这里,使用以下方法:讲Unity暂停,隐藏项目,将iOS项目Window显示                UnityPause(true);         _didResignActive = YES;         Profiler_UninitProfiler();         [[[UnityGetMainWindow() rootViewController] view] setHidden:YES];         [[[iPhone_target2AppDelegate shareApplicationDelegate] window] makeKeyAndVisible];                   return 0.0f;     } }

7. 最后注意一点,startUnity方法只能使用一次。多次调用同样会导致应用Crash,并报错:“should not be reached at domain.c”。

  如果需要在Unity和iOS之间多次切换的话,可以在AppController.mm中加入以下方法

- (void)restartUnity {     [[[UnityGetMainWindow() rootViewController] view] setHidden:NO];     [UnityGetMainWindow() makeKeyAndVisible];     if (_didResignActive)         UnityPause(false);           _didResignActive = NO; }

  在需要的地方调用:

- (void)onClickTest:(id)sender {     if (appController) {         [appController restartUnity];     }else {         appController = [[AppController alloc] init];         [appController startUnity:[UIApplication sharedApplication]];     } }

总结

以上是生活随笔为你收集整理的从iOS应用中,启动一个Unity App的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。