http://blog.csdn.net/dylan_lwb_/article/details/51452470#comments
版权声明:本文为博主原创文章,未经博主允许不得转载。
demo下载地址http://pan.baidu.com/s/1pLcpKpl
1.Unity导出工程时设置bundle
id要与项目一致
2.修改bit code为NO
3.删除Main.storyboard,代码设置控制器(方便切换window)
4.将Classes,Libraries,MapFileParser.sh拖入到项目(选中Copy items if needed,选中Create groups)
将Data拖入到项目(选中Copy items if needed,选中Create folder references)
5.添加framework(最下边三个是HiAR UnitySDK里边的)
6.添加Header Search Paths和Library Search Paths
7.other C Flags -> -DINIT_SCRIPTING_BACKEND=1
8.添加User-Defined (UNITY_RUNTIME_VERSION版本号与导出工程的Unity版本号一致)
9.Unity/Classes/Prefix.pch的代码复制到新建的pch文件,
设置pch文件路径
10.将Classes/main.mm全部内容复制到main.m 并把扩展名改为.mm, 修改如下代码
11.添加Run Script
12. 修改UnityAppController.h如下代码
13.在AppDelegate.h .m中添加如下代码
在集成过程中可能遇到的问题
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
解决办法: 把Mismatched Return Type 改为NO
// 可能有的步骤忘记了, 有疑问的可以在评论区留言
// 转载请注明原地址
网友评论
_z696d75d124 in libHiARWrapper.a(545e348be01fe35810e1b09b40005c99.o)
_za1fbe7a204 in libHiARWrapper.a(545e348be01fe35810e1b09b40005c99.o)
_z7c739f229b in libHiARWrapper.a(545e348be01fe35810e1b09b40005c99.o)
_z72fe1ea9e2 in libHiARWrapper.a(545e348be01fe35810e1b09b40005c99.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
十多个类似这种报错,你的demo。
Profiler_InitProfiler();
切换偶尔是正常的,但有时候会显示错乱,麻烦看下
(void)showUnityWindow {
if (_didResignActive) {
UnityPause(false);
}
_didResignActive = NO;
UnityLoadApplication();
Profiler_InitProfiler();
self.window.hidden =YES;
self.unityWindow.hidden = NO;
[self.unityWindow makeKeyWindow];
}
(void)hideUnityWindow {
UnityPause(true);
_didResignActive = YES;
Profiler_UninitProfiler();
self.unityWindow.hidden = YES;
self.window.hidden = NO;
[self.window makeKeyWindow];
}
发送消息代码:
(void)wjBtnDidClicked {
[kAppDelegate showUnityWindow];
[self toUnityPageWithValue:@"wj"];
}
(void)scenesBtnDidClicked {
[kAppDelegate showUnityWindow];
[self toUnityPageWithValue:@"scenes"];
}
#pragma mark - 跳转到对应的Unity页面
(void)toUnityPageWithValue:(NSString *)value {
// TODO: 新增代码
//报错SendMessage: object Controller does not have receiver for function openSence! 说明UnitySendMessage传递的对象不具备相应的方法
const char *data = [value UTF8String];
/**
你那边需要打开场景的话 需要 传值给 OpenSence这个函数 通过ios给unity对象传值的方式 值有两个 "wj" 和 ”scenes“
"Controller" "openSence" "wj 或者 scenes"
*/
UnitySendMessage("Controller", "OpenSence",data);
}
老是报这个错!