unity工程导入到iOS项目

由于公司需求,需要把在iOS项目里添加unity工程,所以在网上搜索了资料和结合自己遇到的问题,做出的总结。

  1. 先删除项目里的 Main.storyboard 文件(据说是为了方便切换window)
  2. 先在自己项目里创建一个文件夹,用来存放unity文件,然后把unity项目里的Classes,Libraries,MapFileParser.sh拖入到项目(选中Copy items if needed, 选中Create groups)Data拖入到项目(选中Copy items if needed, 选中Create folder references),如下图这样:                                                  
  3. 添加所需的framework:                                         
  4. 添加 Header Search Paths Library Search Paths(直接show in finder拖文件进来就行)
  5. other C Flags -> -DINIT_SCRIPTING_BACKEND=1
  6. 添加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
  7. 将Unity/Classes/Prefix.pch 的代码复制到项目里的pch文件(注意pch里有用到impot的都要用

    #ifdef __OBJC__ 

    #endif

    给括起来,这是因为unity里的项目有很多cpp文件,等下会发生混编错误)
  8. Classes/main.mm全部内容复制到main.m 并把扩展名改为.mm, 然后删除Classes/main.mm文件,修改如下代码
  9. 在Build Phases,点+号,添加Run Script
  10. 修改UnityAppController.h如下代码
    inline UnityAppController*	GetAppController()
    {
        return (UnityAppController*)[[UIApplication sharedApplication] valueForKeyPath:@"delegate.unityController"];
    }
  11. 在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
  12. 把UnityAppController里的

    UnityViewControllerBase* _viewControllerForOrientation[5];
    改为
    UIViewController* _viewControllerForOrientation[5];

  13. 先在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 
  14. 把导进项目unity里的所有.cpp文件的type改为Objectvie-C++ Source(避免出现混编错误) 
  15. 最后编译运行

ps:如果编译还出现错误,可以参考下面大神的博客:

http://blog.csdn.net/dylan_lwb_/article/details/51452470

http://www.jianshu.com/p/487015f3bb13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值