Xcode原生项目集成Unity导出的工程


注:成功的前提:Unity导出的Xcode工程可以编译。

1、 创建好工程之后,将Unity导出的Xcode工程的以下文件夹复制到我们新建的工程中。

Unity导出:Unity导出 
新建工程:新建工程

复制到我们新建的工程中(Command + C,Command + V)

复制之后的目录

2、 搜索Class/Native目录下的所有.h文件,如下图

Native目录
搜索方式

之后新建一个文件夹,随便起名,然后将刚才搜索到的所有.h文件剪切到(直接拖)新建的文件夹。 
Command + A(全选)然后拖。

拖走

此时Class/Native目录下已经没有.h文件。这么做的目的只是方便工程中引用,之后我们还要拖回来。

3、 打开新建的工程,将Class、Libraries拖进根目录,最好与finder中的目录结构一样。

导入工程

注意选项不要选错

选项

完成后如图所示

扫描二维码关注公众号,回复: 3899841 查看本文章

工程目录 

4、 将Data文件夹拖入工程,创建引用(注意选项)

Data选项

如此一来,工程目录如下:

工程目录

对应的finder中的结构

finder目录

5、 删除Libraries目录下的libil2cpp文件夹,选中此文件夹,按delete,或者右键-delete,选择Remove References。

libil2cpp 
选项

然后在finder中,把我们刚移出去的.h从临时文件夹移回Class/Native文件夹:

移回去

6、 将main.m改名为main.mm

将Class目录下的main.mm的内容全选,复制粘贴到我们刚改名的main.mm下面,之前的main.mm仅留下:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
  • 1
  • 2
  • 1
  • 2

在工程中,删除Class目录下的main.mm文件,直接move to trash 
此时有报错,不用理会

7、 添加动态库引用,这里建议对照导出的unity工程的配置来配置。我这里就对照着添加了。注:默认的可能就会有几个,没关系不影响的。不要删,只管添加。

这里需要注意:AVFoundation、CoreMotion、iAd的Status都是Optional,其他的都是Required

添加动态库

配置完成后:

配置完成

8、 找到Build Settings,进行如下配置:

关闭bitcode

关闭BitCode

在other linker flags中,添加四条记录: 
$(inherited) 
-weak_framework 
CoreMotion 
-weak-lSystem

添加4条记录

配置Header search paths

header

配置Library search Paths

library

这两条建议与Unity导出的工程保持一致,当然,注意一下目录结构。如果你当初没有按照我说的放在根目录,这里一定要注意。(路径是按照finder来说的)。 
一般来说Library Search Path是不用改的,系统会自动设置。

path

在Other C Flags中添加,C++那一行会自动添加

Other C Flags

修改编译器:

C99

设置预编译头文件

PrefixHeader

可以直接从左边拖过来,设置完成之后:

设置完成

修改OC警告

修改OC警告

修改所有语言警告:

所有语言 
Unreachable Code
Mismatched return

在user-Defined,添加:

GCC_THUMB_SUPPORT NO 
GCC_USE_INDIRECT_FUNCTION_CALLS NO 
UNITY_RUNTIME_VERSION 5.6.0f3 
注:此参数参考Unity导出的工程中的值,不能乱填。 
UNITY_SCRIPTING_BACKEND il2cpp

点击 +

user-defined

9、 设置Build Phases

点击 + 添加脚本:

添加脚本

注:这里的文字也可以从Unity导出的工程中复制

脚本

10、 在Prefix.pch中,添加一行:

修改头文件

注:如果工程中原来就有预编译头文件,建议合并到这里。

11、 注意这里选择:

编译配置

Command + B编译,成功!

常见问题:

1. 如果编译器报错说没有权限访问MapFileParser.sh这个脚本,打开终端,cd你的工程目录(其实就是MapFileParser.sh所在目录),回车。然后输入以下命令: 
sudo chmod +x MapFileParser.sh 
然后输入登录密码,回车。再编译试试。

如果有其他问题,欢迎评论,我们一起讨论。

2. 因为我们的Unity是延迟加载的,所以如果出现所有的动画(比如导航控制器push动画)消失的问题,全局搜索 [UIView setAnimationsEnabled: 然后依次点进去,注释掉就好了。 
全局搜索

注释掉

建议把搜索到的结果一个一个都注释掉。

Demo:链接: https://pan.baidu.com/s/1eRYeQR4 密码: mnrf


注:成功的前提:Unity导出的Xcode工程可以编译。

1、 创建好工程之后,将Unity导出的Xcode工程的以下文件夹复制到我们新建的工程中。

Unity导出:Unity导出 
新建工程:新建工程

复制到我们新建的工程中(Command + C,Command + V)

复制之后的目录

2、 搜索Class/Native目录下的所有.h文件,如下图

Native目录
搜索方式

之后新建一个文件夹,随便起名,然后将刚才搜索到的所有.h文件剪切到(直接拖)新建的文件夹。 
Command + A(全选)然后拖。

拖走

此时Class/Native目录下已经没有.h文件。这么做的目的只是方便工程中引用,之后我们还要拖回来。

3、 打开新建的工程,将Class、Libraries拖进根目录,最好与finder中的目录结构一样。

导入工程

注意选项不要选错

选项

完成后如图所示

工程目录 

4、 将Data文件夹拖入工程,创建引用(注意选项)

Data选项

如此一来,工程目录如下:

工程目录

对应的finder中的结构

finder目录

5、 删除Libraries目录下的libil2cpp文件夹,选中此文件夹,按delete,或者右键-delete,选择Remove References。

libil2cpp 
选项

然后在finder中,把我们刚移出去的.h从临时文件夹移回Class/Native文件夹:

移回去

6、 将main.m改名为main.mm

将Class目录下的main.mm的内容全选,复制粘贴到我们刚改名的main.mm下面,之前的main.mm仅留下:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
  • 1
  • 2
  • 1
  • 2

在工程中,删除Class目录下的main.mm文件,直接move to trash 
此时有报错,不用理会

7、 添加动态库引用,这里建议对照导出的unity工程的配置来配置。我这里就对照着添加了。注:默认的可能就会有几个,没关系不影响的。不要删,只管添加。

这里需要注意:AVFoundation、CoreMotion、iAd的Status都是Optional,其他的都是Required

添加动态库

配置完成后:

配置完成

8、 找到Build Settings,进行如下配置:

关闭bitcode

关闭BitCode

在other linker flags中,添加四条记录: 
$(inherited) 
-weak_framework 
CoreMotion 
-weak-lSystem

添加4条记录

配置Header search paths

header

配置Library search Paths

library

这两条建议与Unity导出的工程保持一致,当然,注意一下目录结构。如果你当初没有按照我说的放在根目录,这里一定要注意。(路径是按照finder来说的)。 
一般来说Library Search Path是不用改的,系统会自动设置。

path

在Other C Flags中添加,C++那一行会自动添加

Other C Flags

修改编译器:

C99

设置预编译头文件

PrefixHeader

可以直接从左边拖过来,设置完成之后:

设置完成

修改OC警告

修改OC警告

修改所有语言警告:

所有语言 
Unreachable Code
Mismatched return

在user-Defined,添加:

GCC_THUMB_SUPPORT NO 
GCC_USE_INDIRECT_FUNCTION_CALLS NO 
UNITY_RUNTIME_VERSION 5.6.0f3 
注:此参数参考Unity导出的工程中的值,不能乱填。 
UNITY_SCRIPTING_BACKEND il2cpp

点击 +

user-defined

9、 设置Build Phases

点击 + 添加脚本:

添加脚本

注:这里的文字也可以从Unity导出的工程中复制

脚本

10、 在Prefix.pch中,添加一行:

修改头文件

注:如果工程中原来就有预编译头文件,建议合并到这里。

11、 注意这里选择:

编译配置

Command + B编译,成功!

常见问题:

1. 如果编译器报错说没有权限访问MapFileParser.sh这个脚本,打开终端,cd你的工程目录(其实就是MapFileParser.sh所在目录),回车。然后输入以下命令: 
sudo chmod +x MapFileParser.sh 
然后输入登录密码,回车。再编译试试。

如果有其他问题,欢迎评论,我们一起讨论。

2. 因为我们的Unity是延迟加载的,所以如果出现所有的动画(比如导航控制器push动画)消失的问题,全局搜索 [UIView setAnimationsEnabled: 然后依次点进去,注释掉就好了。 
全局搜索

注释掉

建议把搜索到的结果一个一个都注释掉。

Demo:链接: https://pan.baidu.com/s/1eRYeQR4 密码: mnrf

猜你喜欢

转载自blog.csdn.net/baidu_25743639/article/details/72898081