unitty导出工程嵌入iOS原生工程中出现黑屏,但是模型还是可以扫。
一般上出现这个问题,其实就是因为两个注意点没有搞清楚。我们分析一下,如果我们的模型或者视屏能够出来但是屏幕还是黑屏的。说明我们的unity的组件其实已经加载出来了。但是供我们交互的那个Layer类并没有按照我们预想的样子工作。断点查看发现是一个空指针0x0。初步怀疑是VuforiaNativeRendererController这个方法异常工作造成的,所以有了以下的解决过程。
一、如果我们这么写
const char* AppControllerClassName = "AppDelegate"; int main(int argc, char* argv[]) { @autoreleasepool { UnityInitTrampoline(); UnityParseCommandLine(argc, argv); RegisterMonoModules(); NSLog(@"-> registered mono modules %p\n", &constsection); RegisterFeatures(); std::signal(SIGPIPE, SIG_IGN); UIApplicationMain(argc, argv, nil, [NSString stringWithUTF8String:AppControllerClassName]); } return 0; }
我们其实得到的入口代理[UIApplication sharedApplication].delegate所映射并不是我们预想的AppDelegate类名。而是unity那边给我们提供的专门为了与原生交互继承于UnityAppController类的一个子类名字叫VuforiaNativeRendererController的类。其中虽然有帮我们重写了shouldAttachRenderDelegate方法。但是并不能真正实现我们预想的交互效果。
二、我们换种写法的话,就完美绕过了VuforiaNativeRendererController这个类的干扰。现在画面应该已经出现了。详细请看我的上一篇博客http://www.cnblogs.com/fuunnyy/p/6227740.html。有详细的步骤。
const char* AppControllerClassName = "AppDelegate"; int main(int argc, char* argv[]) { @autoreleasepool { UnityInitTrampoline(); UnityParseCommandLine(argc, argv); RegisterMonoModules(); NSLog(@"-> registered mono modules %p\n", &constsection); RegisterFeatures(); std::signal(SIGPIPE, SIG_IGN); NSString *ss = NSStringFromClass([AppDelegate class]); UIApplicationMain(argc, argv, nil,ss); } return 0; }