Unity 渲染框架報(bào)錯(cuò)

override

今天發(fā)包的時(shí)候發(fā)現(xiàn)一個(gè)很拐杖的問(wèn)題,之前版本好好的,突然之間就開(kāi)始在蘋(píng)果手機(jī)奔潰,主要復(fù)現(xiàn)在ios9(iPhone 6P)上,查了半天發(fā)現(xiàn)是Metal引起的錯(cuò)誤,禁用掉之后就好了。我的Unity環(huán)境是5.5.2.f1。

bug日志

Metal GPU Frame Capture Enabled
failed assertion _interposeHandle != NULL at /BuildRoot/Library/Caches/com.apple.xbs/Sources/Metal/Metal-56.7/Framework/MTLDevice.mm:112 MTLInitializeInterpose

具體文件是在Unity自動(dòng)生成的文件UnityAppController+Rendering.mm中

static bool IsMetalSupported(int /*api*/)
{
    _MetalBundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/Metal.framework"];
    if(_MetalBundle)
    {
        [_MetalBundle load];
        //報(bào)錯(cuò)就在下面這行代碼
        _MetalDevice = ((MTLCreateSystemDefaultDeviceFunc)::dlsym(dlopen(0, RTLD_LOCAL|RTLD_LAZY), "MTLCreateSystemDefaultDevice"))();
        if(_MetalDevice)
            return true;
    }

    [_MetalBundle unload];
    return false;
}

解決方案一

在edit scheme中手動(dòng)這只GPU Frame Capture選項(xiàng),設(shè)置值為OpenGL ES,Metal API Validation 設(shè)置為Disable,如圖配置之后運(yùn)行程序就可以正常運(yùn)行了


EditScheme.jpg

解決方案二

在Unity中直接配置Graphics API。首先打開(kāi)Unity工程的Player Settings(快捷鍵:shift + command + B),確認(rèn)工程切換到了ios平臺(tái),然后在Unity右邊欄的Other Setting中找到Auto Graphics API,去掉默認(rèn)的選中復(fù)選框,然后在下面graphics APIs中只保留OpenGLES2,去掉默認(rèn)的Meta,然后導(dǎo)出Xcode工程,確保工程中沒(méi)有引用Metal.Framework,最后導(dǎo)出ipa,安裝,搞定。

PlayerSettings.png

GraphicsAPISetting.jpg

思考和疑問(wèn)

雖然bug好像解決了,我還是有疑問(wèn)。首先,UNity是支持Metal渲染的,為什么會(huì)在這里報(bào)錯(cuò)?是因?yàn)榘姹綰nity或者是IPhone的版本太低導(dǎo)致的低版本bug還是什么?其次在這個(gè)問(wèn)題上延伸,我們?cè)趶腢nity自動(dòng)構(gòu)建iOS程序的時(shí)候如何自動(dòng)配合scheme中的GPU Frame Capture選項(xiàng),而不是每次手動(dòng)配置。關(guān)于配置選項(xiàng)我個(gè)人測(cè)試了一下,即便是在Unity的setting中設(shè)置渲染方式為OpenGL,導(dǎo)出的Xcode工程默認(rèn)還是Aumatically,這個(gè)不知道在哪配置,我查看了一下并不在project.pbxproj文件中,有哪位仁兄知道的可以交流一下。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容