您的位置:首页 > 移动开发 > Unity3D

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),如下图这样:                                                  


添加所需的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity ios
相关文章推荐