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;
}
posted @ 2016-12-28 09:41  懒懒初阳  阅读(1039)  评论(0编辑  收藏  举报