iOS和unity互相融合大体上有两种方式:第一种是把unity工程导入到iOS工程中,这种方法需要在iOS工程中做配置。第二种是把iOS工程导入到unity工程中,这样不用做配置。不过两种方法各有利弊,需要根据自己的项目来进行选择。
第一种:unity导入到iOS项目中
融合之前的建议:一般unity导出的工程如上形式,拿到导出的工程之后,首先运行一下工程,看是否报错。如果是简单的bug,可以尝试解决,如果很复杂,也可以等融合好之后解决。因为我在融合的过程中发现有些错误融合到iOS项目中会自动消失。
开始融合:1.导入文件
需要导入Classes、Data、Libraries、MapFileParse.sh这四个文件。导入Classes、Data、Libraries的时候选择Create groups:
导入Data的时候选择Create folder references:
导入完成之后工程的目录如下:
2.配置iOS工程的环境,以unity工程中的环境为参考
2.1添加依赖库
注意:添加libiconv.2.dylib 方法
Add other 然后全局搜索command+shift+G 然后输入/usr/lib/libiconv.2.dylib查找
2.2添加头文件和库的路径
2.3 其他一些配置
Other C Flags
Other Linker Flags
Language
pch文件
Enable Bitcode
2.4 添加用户定义
注意:unity的版本好要根据自己项目中来填
3.项目中做一些修改
3.1 pch 文件,导入#import "UnityAppController.h"
如果需要和项目中原本的pch文件融合,直接把原项目中的pch文件复制过来就行了。
3.2 修改main.m
把unity中的main.mm中的内容全部复制到iOS项目中的main.m中,并把main.m改为main.mm,并删除unity中的main.mm文件
3.3 修改#import "AppDelegate.h"
AppDelegate.m文件
3.4 修改UnityAppController.h
当有需要实现的方法的时候,在UnityAppController.m实现,例如关闭unity 界面。
以上就是把unity工程导入到iOS工程中。
第二种:iOS导入到unity项目中
这种方法需要先跑通unity的工程,然后把iOS项目中的文件导入进来,不要忘了AppDelegate,然后进行调试解决出现的错误。
最后,记录一些遇到的bug或者注意事项
1.unity和iOS交互问题
2.
终端输入chmod +x / path(MapFileParser.sh文件的路径)解决了该问题
3.
(1)、首先排查了是否有名字重复的文件;
(2)、检查是否在#import头文件的时候,不小心把.h写成了.m。(这个很容易被忽略,谨记!)
4.
重写函数
5./clang:-1: linker command failed with exit code 1 (use -v to see invocation)
注意:libiconv.2.dylib 这个的添加方法
Add other 然后全局搜索command+shift+G 然后输入/usr/lib/libiconv.2.dylib查找就可以了
到这里为止了,如果哪里有错误的,请帮忙指出来,如果还有疑问不明白的,可以发消息询问。
6.Functions that differ only in their return type cannot be overloaded
》解决办法:把Enable Strict Checking of objc_msgSend Calls改为NO
7.__weak typeof(self)wSelf = self报错:- A parameter list without types is only allowed in a function definition. A corresponding warning tells me that __weak only applies to Objective-C object or block pointer types;type here is 'int'
》解决办法:Xcode-> Build Settings-> C Language Dialect修改配置,C99改为GNU99,C99是不包含typeof的
网友评论