unity工程导入到iOS项目
2017-01-05 14:47
369 查看
由于公司需求,需要把在iOS项目里添加unity工程,所以在网上搜索了资料和结合自己遇到的问题,做出的总结。
先删除项目里的 Main.storyboard 文件(据说是为了方便切换window)
先在自己项目里创建一个文件夹,用来存放unity文件,然后把unity项目里的Classes,Libraries,MapFileParser.sh拖入到项目(选中Copy
items if needed, 选中Create groups)将Data拖入到项目(选中Copy
items if needed, 选中Create folder references),如下图这样:
![](https://img-blog.csdn.net/20170105114142251?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
添加所需的framework:
![](https://img-blog.csdn.net/20170105114926142?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
添加 Header Search Paths、 Library
Search Paths(直接show in finder拖文件进来就行)
![](https://img-blog.csdn.net/20170105115237331?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170105115357956?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
other C Flags -> -DINIT_SCRIPTING_BACKEND=1
![](https://img-blog.csdn.net/20170105115633426?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
添加User-Defined
设置key值:GCC_THUMB_SUPPORT,设置Value值:NO
设置key值:GCC_USE_INDIRECT_FUNCTION_CALLS,设置Value值:NO
设置key值:UNITY_RUNTIME_VERSION,设置Value值:5.4.3f1 (这里与你的unity项目的版本一致)
设置key值:UNITY_SCRIPTING_BACKEND,设置Value值: il2cpp
![](https://img-blog.csdn.net/20170105120321039?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
将Unity/Classes/Prefix.pch 的代码复制到项目里的pch文件(注意pch里有用到impot的都要用
#ifdef __OBJC__
#endif
给括起来,这是因为unity里的项目有很多cpp文件,等下会发生混编错误)
将Classes/main.mm全部内容复制到main.m
并把扩展名改为.mm, 然后删除Classes/main.mm文件,修改如下代码
![](https://img-blog.csdn.net/20170105142557384?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在Build Phases,点+号,添加Run Script
![](https://img-blog.csdn.net/20170105143153060?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
修改UnityAppController.h如下代码
在AppDelegate.h .m中添加如下代码
把UnityAppController里的
先在viewcontroller里切换到unity
把导进项目unity里的所有.cpp文件的type改为Objectvie-C++ Source(避免出现混编错误)
![](https://img-blog.csdn.net/20170105144349971?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU1MTkzMzM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
最后编译运行
ps:如果编译还出现错误,可以参考下面大神的博客:
http://blog.csdn.net/dylan_lwb_/article/details/51452470
http://www.jianshu.com/p/487015f3bb13
先删除项目里的 Main.storyboard 文件(据说是为了方便切换window)
先在自己项目里创建一个文件夹,用来存放unity文件,然后把unity项目里的Classes,Libraries,MapFileParser.sh拖入到项目(选中Copy
items if needed, 选中Create groups)将Data拖入到项目(选中Copy
items if needed, 选中Create folder references),如下图这样:
添加所需的framework:
添加 Header Search Paths、 Library
Search Paths(直接show in finder拖文件进来就行)
other C Flags -> -DINIT_SCRIPTING_BACKEND=1
添加User-Defined
设置key值:GCC_THUMB_SUPPORT,设置Value值:NO
设置key值:GCC_USE_INDIRECT_FUNCTION_CALLS,设置Value值:NO
设置key值:UNITY_RUNTIME_VERSION,设置Value值:5.4.3f1 (这里与你的unity项目的版本一致)
设置key值:UNITY_SCRIPTING_BACKEND,设置Value值: il2cpp
将Unity/Classes/Prefix.pch 的代码复制到项目里的pch文件(注意pch里有用到impot的都要用
#ifdef __OBJC__
#endif
给括起来,这是因为unity里的项目有很多cpp文件,等下会发生混编错误)
将Classes/main.mm全部内容复制到main.m
并把扩展名改为.mm, 然后删除Classes/main.mm文件,修改如下代码
在Build Phases,点+号,添加Run Script
修改UnityAppController.h如下代码
inline UnityAppController* GetAppController() { return (UnityAppController*)[[UIApplication sharedApplication] valueForKeyPath:@"delegate.unityController"]; }
在AppDelegate.h .m中添加如下代码
#import <UIKit/UIKit.h> #import "UnityAppController.h" @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) UIWindow *unityWindow; @property (strong, nonatomic) UnityAppController *unityController; - (void)showUnityWindow; - (void)hideUnityWindow;
#import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (UIWindow *)unityWindow{ return UnityGetMainWindow(); } - (void)showUnityWindow{ [self.unityWindow makeKeyAndVisible]; } - (void)hideUnityWindow{ [self.window makeKeyAndVisible]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor whiteColor]; ViewController * vc = [[ViewController alloc]init]; self.window.rootViewController = vc; self.unityController = [[UnityAppController alloc]init]; [self.unityController application:application didFinishLaunchingWithOptions:launchOptions]; [self.window makeKeyAndVisible]; return YES; } - (void)applicationWillResignActive:(UIApplication *)application { [self.unityController applicationWillResignActive:application]; } - (void)applicationDidEnterBackground:(UIApplication *)application { [self.unityController applicationDidEnterBackground:application]; } - (void)applicationWillEnterForeground:(UIApplication *)application { [self.unityController applicationWillEnterForeground:application]; } - (void)applicationDidBecomeActive:(UIApplication *)application { [self.unityController applicationDidBecomeActive:application]; } - (void)applicationWillTerminate:(UIApplication *)application { [self.unityController applicationWillTerminate:application]; } @end
把UnityAppController里的
UnityViewControllerBase* _viewControllerForOrientation[5];改为
UIViewController* _viewControllerForOrientation[5];
先在viewcontroller里切换到unity
#import "ViewController.h" #import "AppDelegate.h" @interface ViewController () @property(strong, nonatomic) UIButton *Btn; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _Btn = [[UIButton alloc]initWithFrame:CGRectMake(40, 200, 80, 70)]; _Btn.backgroundColor = [UIColor cyanColor]; [_Btn setTitle:@"开启" forState:UIControlStateNormal]; [_Btn addTarget:self action:@selector(go) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:_Btn]; // Do any additional setup after loading the view, typically from a nib. } -(void)go{ //进入unity界面 [(AppDelegate *)[UIApplication sharedApplication].delegate showUnityWindow]; UnityPause(false); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
把导进项目unity里的所有.cpp文件的type改为Objectvie-C++ Source(避免出现混编错误)
最后编译运行
ps:如果编译还出现错误,可以参考下面大神的博客:
http://blog.csdn.net/dylan_lwb_/article/details/51452470
http://www.jianshu.com/p/487015f3bb13
相关文章推荐
- iOS将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法
- iOS - 将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法
- iOS - 将Unity导出的Xcode工程导入到另一个Xcode项目, 及常见报错的解决方法
- unityios开发--unity3d 发布到ios平台 项目工程文件大小优化
- unity导出ios工程导入到另一个工程中
- Unity项目工程集成Mob的社会化分享SDK之发布到iOS平台
- unity导出工程导入到iOS原生工程中详细步骤
- Unity项目工程集成友盟分析统计SDK(支持iOS与Android平台)
- 【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Android导入打包运行即可!
- 【iOS-cocos2d-X 游戏开发之四】Cocos2dX创建Android NDK新项目并编译导入Eclipse中正常运行! 推荐
- Xcode4.2中将Three20开源库导入到工程项目中
- 【iOS-cocos2d-X 游戏开发之四】Cocos2dX创建Android NDK新项目并编译导入Eclipse中正常运行!
- Xcode4.2中将Three20开源库导入到工程项目中
- 【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- ios项目中导入百度地图SDK出错的问题
- 导入别人的项目时,工程中不自动生成Android Dependencies的解决方式
- Xcode4.2中将Three20开源库导入到工程项目中
- iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Xcode编写&编译代码,Android导入打包运行即可!
- Myeclipse中导入的工程项目根目录上有红叉,但目录下的文件并没有错
- 【iOS-cocos2d-X 游戏开发之七】整合Cocos2dX的Android项目到Xcode项目中,Android导入打包运行即可! 推荐