Unity 5.6配置到Swift 3工程中
参考配置文章:
Swift3.0融合Unity
http://www.jianshu.com/p/e8217896d6ff
建议按上面的文章配置一次,配置不成功或者报错时再来参考这篇文章
先到该网址下载需要文件(ios-unity5-master)并解压
https://github.com/blitzagency/ios-unity5
里面文件是
Unity导出工程:
在Unity网站下载最新版的Unity(本次配置成功是选择免费的)
安装Unity并验证账号
可在这个网站下载模型Unity模型:(登录账号选择那些0积分的下载,需要筛选unity模型)
模型下载后打开对应的unity模型文件
然后选择New Unity Project
打开Unity后如果此处没有模型文件(即空白,下图是有模型文件)就打开菜单
File -> Open Sence把下载的模型文件导入进来
然后打开这几个模型文件,找到里面的模型(不是贴图),拖到界面中
然后开始导出Unity的Xcode工程
File -> Build Settings
选择iOS,然后如果左下角Switch Platform按钮可点击就点击,作用就是转换成iOS平台(下次再选择iOS就不能点击了)
然后右侧Run in Xcode as有Debug和Release两种选择,此处选择Release
选好之后点击Player Settings(不是Build!!!),弹出以下界面。选择Other Settings栏。此时可以先把Build Setting界面关掉
可按如上配置
提示:
1.Bundle Identifier处填你项目的Bundle Identifier
2.Target SDK有两个选项Device SDK 和 Simulator 网上说前者是真机,后者是模拟器。没试过选择Simulator。
然后回到Build Setting中,如果关闭了再打开就行了,上面配置不会变的。
点击Build。填写导出的文件名和导出路径后点击save。导出时间有点长(电脑配置高的话很快)。
导出完毕后可以关闭Unity了。
打开导出的文件,内容如下
实际需要的文件是Classes,Libraries和Data。其他暂时没用到(包括Unity的Xcode工程)。后面说的项目或者工程都是指自己的Swift工程。
下面开始配置自己的Swift工程:
1.在开始配置之前先在自己工程中配置好pch文件
2.导入一下依赖库,按照下图添加(最好不要重复导入)
dylib类型的库添加方法:
Build Phases -> Link Binary With Libraries —> + , 在对话框中点 Add Other, 然后在新的对话框用快捷键Command+Shift+G打开新的Folder对话框,输入/usr/lib/,然后点Go,在新弹出的dylib库目录选择libc++.dylib并添加。
添加完毕后建议copy一份备份的工程,以防出错后重新添加。
个人配置过程:
1.配置好pch,导入相关的库(如上面所说)
2.导入下载的那些.mm文件, .h文件(build一下就可能开始报错了)
3.Project->Info切换为Unity后pod install,并在Unity.xcconfig里面添加相关代码
4。(1)配置Target->build setting->User-Defined的Unity版本和UNITY_IOS_EXPORT_PATH路径。(2)在Build Phases添加Run Script并且配置其中的内容。(3)配置Target->build setting 的 Header Search Paths 和 Library Search Paths路径。(不存在的路径暂时不要添加,否则后面可能会报这个路径不存在的错误)
5.导入Classes,Data,Libraries文件夹到自己的工程,路径要和上面配置的路径一致。
6.配置main.swift,修改main.mm等相关内容
7.完成后clean一下再build一下。如果报错可以按照下面的错误集合参考一下。
详细的配置按开头的 “Swift3.0融合Unity” 文章进行配置就行了。配置之前先了解一下下面3个提示
提示:
1.Classes,Library,Data拉到工程里面去后,打开Classes,把里面的pch文件的内容复制到自己工程的pch文件中,然后把Classes里面的pch文件删除掉(删除掉后要确认一下Build Setting里面pch的路径是不是正确)
项目的pch文件2.如果自己的工程已经存在桥接文件,就不需要把UnityBridge.h桥接文件拖进项目中,直接把UnityBridge.h里面的内容(如下面红框中的内容)copy到自己工程的桥接文件中。
3.没有UNITY_IOS_EXPORT_PATH等字段
如果Targets->Build Setting->最下面的User-Defined里面没有UNITY_IOS_EXPORT_PATH等字段的话就把Project->Info -> Configurations里面的文件改为Unity。然后打开命令窗口cd到项目有Podfile的文件夹处(直接拖入Podfile的上层文件夹路径就好了)。输入pod install回车等配置完成后就会出现这些字段了。
替换为Unity配置完成后就会有以下字段
pod install后记得在Unity.xcconfig里面添加以下内容:(“项目的名字”改成你swift项目的名字)
#include"Pods/Target Support Files/Pods-项目的名字/Pods-项目的名字.debug.xcconfig"
#include"Pods/Target Support Files/Pods-项目的名字/Pods-项目的名字.release.xcconfig”
注意:UNITY_RUNTIME_VERSION填的是Unity的版本,并不是下面的version
错误集合:
部分错误都可以在开头介绍的文章里或者网上找到答案
1.提示@throw的错误:Targets->Build Settings -> 搜索Enable Objective Exceptions -> Yes
2.提示__weakSelf的错误:Targets->Build Settings -> 搜索C Language Dialect c99改成GNU99
3.代码UnityParseCommandLine处报错 ->该行代码改成UnityInitRunTime
4.nullptr错误:参考开头介绍的文章后面的评论
5.diff的错误
在Unity.xcconfig文件里添加原来的xcconfig文件路径
#include"Pods/Target Support Files/Pods-项目的名字/Pods-项目的名字.debug.xcconfig"
#include"Pods/Target Support Files/Pods-项目的名字/Pods-项目的名字.release.xcconfig”
Unity.xcconfig文件中6.如果解决了5的问题(上面的问题)后报Pods里面第三方库的某个.h文件找不到(#import “???.h” not found)问题且该.h文件实际是存在的话,可以在Target->Build Setting搜索header search,如下图,在Header Search Paths里面添加该.h文件的上层路径。
如果该问题解决之后报更多的和这个.h文件所在的第三方库有关的其他文件问题,可以在Targes -> General最下面点击+号,把这个库对应的framework添加到现在的库里面去。
7.custom_unity_inif错误 或者 UnityAppController.h错误
如果项目本来就存在桥接文件,就把UnityBridge.h里面的#import文件内容放到自己项目工程的桥接文件里面去。
如果项目没有桥接文件,最好新建桥接文件。(虽然也可以使用UnityBridge.h当做桥接文件)
8.弹出很多错误的arm64错误(比如201个错误):
先在Targets->build settings搜索other Linker Flags,在里面添加$(inherited)
clean后再Build如果还报错就可能和运行设备有关。
在Unity导出Xcode工程时在Player Settings弹出的界面中选择的是Device SDK,则自己swift项目的运行设备要选择真机(插入真机)。如果选择的是Simulator则选择模拟器(没试过这个Simulator)。
再clean后Build一下可能这个错误就没了。
9.弹出很少错误的arm64错误:
这个错误找了很久没找到解决方法,英文的网站也找了不少。本次解决的办法是重新配置Unity到Xcode工程(个人是因为发现UnityBridge.h文件和项目的桥接文件都存在项目中,而且UNITY_RUNTIME_VERSION字段填的是1.0,并不是Unity实际的版本号,所以果断重新配置,发现这个问题竟然消失了,这个问题我弄了一天一夜,虽然网上有挺多相关解决办法,但都不适用我的工程)。