demo下载地址:https://pan.baidu.com/s/1hs9Mjha
1.unity导出文件时,设置bundle id 与项目的bundle id一致 unity:(file-->building setting-->playerSetting-->otherSettings)
2.Xcode中bitCode设置为NO
3.将Classes,Libraries,MapFileParser.sh拖入到项目(选中Copy items if needed, 选中Create groups),将Data拖入到项目(选中Copy items if needed, 选中Create folder references)
4.添加framework
5.添加Header Search Path
$SRCROOT/ios
$SRCROOT/ios/Classes
$SRCROOT/ios/Classes/Native
$SRCROOT/ios/Libraries
$SRCROOT/ios/Libraries/libil2cpp/include
(注:ios之前是路径 自行更改自己文件夹的路径)
6.添加Library Search Paths
$(inherited)
$(PROJECT_DIR)
$(SRCROOT)/ios/Libraries/Plugins/iOS
$(PROJECT_DIR)/Libraries
7.other C Flags -> -DINIT_SCRIPTING_BACKEND=1
8.添加User-Defined (UNITY_RUNTIME_VERSION版本号与导出工程的Unity版本号一致)
9.新建pch文件 将Prefix.pch文件内容复制到新建的pch文件中并设置pch文件路径 删除原有的pch文件
10.将Classes/main.mm全部内容复制到main.m 并把扩展名改为.mm, 修改如下代码
return UIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegate class]));
11. 添加Run Script
$SRCROOT/ios/MapFileParser.sh(MapFileParser.sh之前的为你到这个文件的路径)
12.AppDelegate添加代码
@property (strong,nonatomic)UIWindow *window;
@property (strong,nonatomic)UIWindow *unityWindow;
@property (strong,nonatomic)UnityAppController * unityAppController;
-(void)showUnity;
-(void)hideUnity;
13.UnityAppController修改代码
return (UnityAppController*)[[UIApplicationsharedApplication]valueForKeyPath:@"delegate.unityAppController"];(unityAppController是你在AppDelegate中给UnityAppController对象的名字)
14.修改AppDelegate代码
注:可以先给UnityAppController中调用StartUnity方法的地方注释掉 需要打开unity时 调用startUnity方法,但是startUnity方法只能调用一次 否则crash(若想在项目中反复打开关闭unity,startUnity方法调用一次,不显示unity界面时给它hidden设置成YES,显示unity界面时给它hidden设置成NO)
内容来自:http://blog.csdn.net/dylan_lwb_/article/details/51452470
在集成过程中可能遇到的问题
1.Unknown type name 'UnityViewControllerBase'
UnityViewControllerBase报错, 把它改成UIViewController
2. Unknown type name 'AppDelegate'
在新建的项目里边不会报错, 但是我集成到公司项目的时候报这个错, 于是改成如下代码, 目前没有出现问题, 如果有人知道原因, 请在评论区告诉我
3. Undefined symbols for architecture armv7
遇到这个错的同学请添加AssetsLibrary.framework和Accelerate.framework
4.编译时遇到Permission denied错误的是因为当前开发账号对项目目录没有权限执行MapFileParser.sh
解决办法: 在终端执行命令 sudo chmod -R 777 所在的目录
5. Functions that differ only in their return type cannot be overloaded
解决办法: 把Enable Strict Checking of objc_msgSend Calls 改为NO
6. Control reaches end of non-void function
遇到的问题
1.调用startUnity方法会给系统的状态栏隐藏 若不想隐藏 将UnityViewControllerBaseiOS.mm文件中prefersStatusBarHidden改为false
2.unity按钮点击事件不好用,将[UnityGetMainWindow() makeKeyAndVisible];这句话加上 设置为主窗口即可