Xcode中如何集成Unity

项目中需要集成unity,摸索了大半周,碰到了很多坑,终于搞定。

我的方法是,通过unity导出一个空的iOS项目,然后再新建一个Xcode项目,针对配置页面一一对应。直到配置完全一样,然后倒入相关资源文件。从untiy导出的iOS项目我命名为UnityProject,原生应用我命名为Native。

一、拷贝文件

将UnityProject项目下  Classes Data Libraries MapFileParser MapFileParser.sh  拷贝到Native主项目 根目录下

二、添加framework

三、配置

1、添加run script

2、添加Search Paths

Header Search Paths 添加
"$(SRCROOT)/Classes"
"$(SRCROOT)"
$(SRCROOT)/Classes/Native
$(SRCROOT)/Libraries/bdwgc/include
$(SRCROOT)/Libraries/libil2cpp/include

Library Search Paths 添加
$(inherited)
"$(SRCROOT)"
"$(SRCROOT)/Libraries"

3、添加预处理文件

Classes/Prefix.pch

4、添加 -DINIT_SCRIPTING_BACKEND=1

四、修改main.m

  • 复制Classes/main.mm内容到main.m  修改main.m的扩展名为.mm
  • 删除Unity生成main.mm
  • return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

五、修改 unityAppController

inline UnityAppController* GetAppController()
{
return (UnityAppController*)[[UIApplication sharedApplication] valueForKeyPath:@"delegate.unityAppController"];

}

六、修改 appdelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    BOOL returnBool;
    if (_unityAppController == nil) {

        _unityAppController = [[UnityAppController alloc] init];
    }
    returnBool = [_unityAppController application:application didFinishLaunchingWithOptions:launchOptions];
//    self.window = _unityAppController.window;

    HelloViewController *vc = [[HelloViewController alloc] init];
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];

    return YES;

}

- (void)applicationWillResignActive:(UIApplication *)application {
    [_unityAppController applicationWillResignActive:application];
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    [_unityAppController applicationDidEnterBackground:application];

    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    [_unityAppController applicationWillEnterForeground:application];

    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [_unityAppController applicationDidBecomeActive:application];

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    [_unityAppController applicationWillTerminate:application];
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

错误总结

1、Expected identifier or ‘(‘

修改UnityViewControllerBaseiOS.h

#ifdef __cplusplus
extern "C" {
#endif
    void AddViewControllerRotationHandling(Class class_, IMP willRotateToInterfaceOrientation, IMP didRotateFromInterfaceOrientation, IMP viewWillTransitionToSize);
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C" {
#endif
    void AddViewControllerDefaultRotationHandling(Class class_);
#ifdef __cplusplus
}
#endif
时间: 2024-09-29 02:32:10

Xcode中如何集成Unity的相关文章

xCode中使用版本控制git

项目有多人协作的时候需要使用版本管理工具,常用的版本控制软件有git和svn. git的官网地址:http://git-scm.com/ svn地址:http://subversion.apache.org/ xcode中集成了git,而且使用起来非常简单.下面我就说说git的用法吧: 1.打开xcode,看到如下界面,见图一: 图一 选择"checkout an exitsting project",表示从服务器签出一个最新的版本. 我们选择即可,然后,顺利成章的找到了服务器的项目

Xcode中导入.a静态库后报错添加-force_load或-all_load

第一种方法: 以前在做项目的时候在Xcode中倒入一个三方SDK的时候,会有一些.a的静态库,这时候如果直接编译运行就会报错.当时只知道往build settings的linker flags 里面添加-force_load和.a文件的路径.最近又多次用到,这里总结一下. 例如在Xcode中倒入一个SIPSKDK,如下,这里面包含了一个.a的静态库. 如果直接运行的没用到里面方法的时候运行时没问题的,但是一旦导入头文件,并创建SIPClient对象的时候就会报错,如下所示: 这里报错的原因主要是

Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动.启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存.CPU和文件系统. 每个跟踪模板都有不同的用途,其中Leaks可以检测内存泄漏点,Allocations跟踪模板可以查看内存的使用情况.下面我们通过一个实例介绍一些Instruments工具的使用,我们来人为制造一个内存泄漏,我们在HelloWorldScene.cpp中修改代码: [html] v

盘点Xcode中开发者最喜爱的十大开源插件

Xcode IDE拥有着诸如导航.重构.校准等众多非常高大上的工具,而予以辅助的插件更是在Xcode的基础上对相关功能进行改进与扩展.在应用开发过程中,通过开源包管理器Alcatraz对插件进行安装管理,打造最为强大的开发环境,早已成为开发者们的必备功课.本文总结介绍了备受开发者喜爱的10款开源Xcode插件,涉及代码编辑.注释.管理等各个方面. 1. Code Pilot 说到Xcode那些炙手可热的插件,很多开发者首先都会想到Code Pilot.Code Pilot是Xcode 5的一款扩

Cocos开发中性能优化工具介绍(一):Xcode中Instruments工具使用

Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动.启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存.CPU和文件系统. 每个跟踪模板都有不同的用途,其中Leaks可以检测内存泄漏点,Allocations跟踪模板可以查看内存的使用情况.下面我们通过一个实例介绍一些Instruments工具的使用,我们来人为制造一个内存泄漏,我们在HelloWorldScene.cpp中修改代码: 1 2 3 4

XCode中使用SVN 教程

XCode中使用SVN 教程 [转载][iOS]SVN详细教程(一) (2013-03-18 15:50:02) 转载▼ 标签: 转载   原文地址:[iOS]SVN详细教程(一)作者:Sin柠檬 修改subversion.config方法: 可以直接在终端上输入:vi ~/.subversion/config来编辑. 也可以通过Finder搜索.subversion,点击下边的+号,进入高级搜索界面,找到各类->其他-> 文件可见性 ,选择不可见文件即可搜索到.subversion文件夹.

xCode中常见的错误分析

程序中报错:@synthesize of 'weak' property is only allowed in ARC or GC mode的解决方法 现在的项目是手动内存管理,所以在引入第三方资源库时候,很多资源库更新以后都开始使用arc进行编码,这样就导致两种代码风格不一致,有的时候可能开发者也没有注意到这些问题,反正用的时候也没有报错,就直接使用了:但是有的时候,因为arc编码中用到了新的属性修饰符,例如weak,这时候在手动管理内存的代码中就不能编译通过,报错的内容就是:@synthes

Xcode 中 Git 的配置与使用

Xcode 中 Git 的配置与使用主要围绕下面几个问题展开阐述: 问题1,如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 问题2,如何在Xcode中提交推送给远程服务器代码库? 问题3,如何在Xcode中克隆远程服务器代码库到本地? 问题4,如何使用Xcode获取远程代码库数据,并解决冲突问题? 一.如何在Xcode中创建本地代码库,并添加和提交代码到本地代码库? 创建代码库有两种方式: 方式1:新建工程的时候创建 1. 勾选Create Git repository on

Xcode中如何在即将启动的APP中设置断点调试

在实际的App应用中,我们可能会碰到这么一种情况:我们设计一个APP,它可能会在外界发送某种消息或满足某种条件时,被动的启动加载,并根据外界传入的一些参数进行初始化工作. 这里由于程序是由其他程序启动的,所以我们不能够直接在XCode中编译运行程序并设置断点调试.但幸运的是,XCode提供了附加在进程上的调试功能,并且可以在进程启动前,通过进程名称等待进程运行,并在进程真正加载起来时,进入断点调试.具体方法如下: 1.在待调试的XCode中选择Debug->Attach to Process->