日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2024/9/30 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。