从iOS应用中,启动一个Unity App
2013-07-30 16:31
771 查看
文章前面的话:
下文是在13年写的,基于版本为: Unity 4.0 Xcode 4.6
当前开发工具已经过多个版本升级,所以有些地方可能已经与下文描述不符。
若有时间我回头使用新版做个demo,到时更新链接过来。评论可能无法一一回复,各位见谅。
==================== 正文分割线 ====================
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])”
4. 在“iPhone_target2AppDelegate”中,就可以正常的使用我们iOS项目了。
5. 接下来就是本文的重点了,怎么启动Unity项目呢。
6. 从Unity项目退出,返回iOS项目。在AppController.mm中加入对Unity的响应,代码如下
这里使用了Unity和Object-C之间的代码交互。详见:http://alexanderwong.me/post/29861010648/call-objective-c-from-unity-call-unity-from
7. 最后注意一点,startUnity方法只能使用一次。多次调用同样会导致应用Crash,并报错:“should not be reached at domain.c”。
如果需要在Unity和iOS之间多次切换的话,可以在AppController.mm中加入以下方法
在需要的地方调用:
PS: 有错轻拍
开发工具版本:Unity 4.0 Xcode 4.6
下文是在13年写的,基于版本为: Unity 4.0 Xcode 4.6
当前开发工具已经过多个版本升级,所以有些地方可能已经与下文描述不符。
若有时间我回头使用新版做个demo,到时更新链接过来。评论可能无法一一回复,各位见谅。
==================== 正文分割线 ====================
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]]; } }
PS: 有错轻拍
开发工具版本:Unity 4.0 Xcode 4.6
相关文章推荐
- Unity 从iOS应用中,启动一个Unity App
- 从iOS应用中,启动一个Unity App
- Unity4.x实现Native App启动Unity,制作混合应用(Integrate Native iOS App into Unity App)
- iOS中一个APP的启动过程
- ios 一个app启动另一个app
- AngularJS 在同一个界面启动多个ng-app应用模块详解
- Android&iOS:如何在外部启动app(若有安裝APP, 则自动启动app(使用 URL Schema), 若没有安装, 则询问是不是到应用市场下载)
- 怎样做一个iOS App的启动分层引导动画?
- iOS实现一个应用去handle另一个应用(一个App打开另外一个App)
- iOS新手指导在APP中的添加,第一次启动应用出现,后面都不出现
- 跨应用启动(在一个APP里启动另一个APP)
- 标签:ios开发 界面启动 APP下载安装第一次使用一般会显示一个首次启动引导界面然后进入主界面,非首次开启APP也通常会显示一个启动界面然后进入主界面。 1、本例首次启动显示First
- 怎样做一个iOS App的启动分层引导动画
- 输出Bag中的所有记录为一个json数组---精通android、IOS App应用服务程序开发
- 怎样做一个iOS App的启动分层引导动画?
- iOS 应用添加启动画面以及App应用图标的方法 分类: ios开发 2015-04-07 20:32 213人阅读 评论(0) 收藏
- 输出Bag中的所有记录为一个只有值的json数组---精通android、IOS App应用服务程序开发
- iOS开发app怎么延迟应用的启动时间…
- iOS app启动图片及icon图片及应用名设置
- iOS 应用添加启动画面以及App应用图标的方法