如何定位Unity死循環致使的徹底卡死

1)如何定位Unity死循環致使的徹底卡死
​2)如何設定Unity AssetBundle單個包大小
3)MaterialPropertyBlock修改Stencil相關參數
4)線性空間中動做文件控制材質球顏色失真問題
5)DrawMeshInstancedIndirect在華爲手機上失效
html


這是第240篇UWA技術知識分享的推送。今天咱們繼續爲你們精選了若干和開發、優化相關的問題,建議閱讀時間10分鐘,認真讀完必有收穫。網絡

UWA 問答社區:answer.uwa4d.com
UWA QQ羣2:793972859(原羣已滿員)
編輯器

Script

Q:運行遊戲時,在某些特定的狀況下,Unity會忽然卡死,看任務控制器裏的Unity進程內存會持續飆升到很高的值。函數

因爲目前遊戲工程已經很大了,而且腳本衆多(Lua+C#),出現這種狀況時又沒有異常日誌,斷點也斷不到位置,也不知道是哪裏出現的死循環異常了,這個問題卡了好久,沒思路了,求解。測試

A1:經網友真木提示了這篇文章:https://www.cnblogs.com/lijiajia/p/10817407.html優化

經過debug.sethook這個函數來註冊一個Hook的Handler,把每一行或者每一個函數的調用都打印出來,就能知道死循環的位置了。這種方法可用於找Lua的死循環,假如是C#的死循環,須要其它方法。動畫

感謝題主loy_liu@UWA問答社區提供了回答網站

A2:若是是C#的死循環,可使用VS附加Unity調試,暫停整個遊戲,而後切換到主線程,看看主線程當前運行到了哪一句。url

感謝西元前的史萊姆@UWA問答社區提供了回答spa


AssetBundle

Q:Unity AssetBundle單個包大小多少比較合適?

A1:之前LZMA格式時,是建議小於1MB的,如今已經沒有這個約束了。由於LoadFromFile+LZ4的加載速度已經很是快了。因此,文件大小更建議從熱更新的角度出發,儘量不要給熱更新產生大的麻煩便可。

該問答由UWA提供

A2:樓上說得對,讀取速度已經不是問題,不要過小也不用太大,我的以爲1-10MB間差很少均可以,我我的是以使用的彙集性把每一個包控制在幾MB左右。

感謝徐軍@UWA問答社區提供了回答


Material

Q:我在原生的Sprite-default Shader中加入了Stencil的相關設置,在編輯器狀態下用MaterialPropertyBlock修改Stencil的Comp和Ref,在Inspector面板中該值已經被修改,可是在Frame Debugger中並未生效修改值,仍是未修改前的設置,是不能用MaterialPropertyBlock改Stencil的相關參數嗎?

 

A:可參考如下信息:

 

感謝羽飛@UWA問答社區提供了回答


Rendering

Q:線性空間中動做文件控制材質球顏色失真問題。
如下是直接設置材質球的顏色顯示:

如下是經過Animator動做文件設置材質球的顏色顯示:

爲何不一樣呢?材質球是[HDR] Color有問題。(版本:Unity 2019.4.9f)

A:在線性空間中,寫入到MaterialPropertyBlock的渲染顏色參數,在渲染時會轉換到Gamma空間,即變成2.2次冪。

用動畫修改材質的顏色,實際上是向MaterialPropertyBlock中配置參數。因此在使用K材質球設計動畫時,須要把顏色值的0.4545次冪寫入到曲線中。

感謝張首峯@UWA問答社區提供了回答


Rendering

Q:Unity 2018.4.24的DrawMeshInstancedIndirect在華爲手機上失效是爲何?我使用Testin的華爲手機進行測試DrawMeshInstancedIndirect接口,試過的都是不行的,可是我用其餘的手機就均可以。有遇到一樣問題嗎?

A1:貼上詳細日誌看看,而後把華爲手機的設備信息貼上,最後問下是否是帶麒麟CPU的華爲機。

感謝Robot.Huang@UWA問答社區提供了回答

A2:因爲驅動程序問題,對於僅具備OpenGL ES 3.0的Adreno GPU的Android設備禁用了GPU實例支持。

Graphics: GPU Instancing: Added support for Android with OpenGL ES 3.0 or newer. Note however that GPU instancing support is disabled for Android devices that have the Adreno GPU with only OpenGL ES 3.0, because of driver issues.

可使用SystemInfo.supportsInstancing檢測機器是否支持GPU Instancing,最保險的方式就是OpenGL ES 3.1及以上支持。

感謝鄭驍@UWA問答社區提供了回答

A3:最後發現是華爲Mali不支持SSBO的緣由。

感謝題主halm@UWA問答社區提供了回答

封面圖來源於網絡


今天的分享就到這裏。固然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,咱們早已在UWA問答網站上準備了更多的技術話題等你一塊兒來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之「石」,也能攻你之「玉」。

官網:www.uwa4d.com
官方技術博客:blog.uwa4d.com
官方問答社區:answer.uwa4d.com
UWA學堂:edu.uwa4d.com 官方技術QQ羣:793972859(原羣已滿員)

相關文章
相關標籤/搜索