如何定位Unity死循環導致的完全卡死


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


這是第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調試,暫停整個游戲,然后切換到主線程,看看主線程當前運行到了哪一句。

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


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(原群已滿員)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM