UI節點對運行效率的影響

1)UI節點對運行效率的影響
2)Crunched壓縮的貼圖大小
3)iOS提審被拒原因排查
4)關於Post Processing移動端使用異常的問題
5)下劃線開頭的文件無法打進APK


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

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

UGUI

Q:Canvas下的UI節點數量過多會影響運行效率嗎?

A:Canvas在CPU方面的消耗主要是Rebatch和Rebuild。

Rebatch發生在C++層面,是指Canvas分析UI節點生成最優批次(渲染指令)的過程,節點數量過多會導致算法(貪心策略)耗時較長,關於Batching的過程可以參考:《Guess Into UGUI》

Rebuild發生在C#層面,是指UGUI庫中Layout組件調整RectTransform尺寸、Graphic組件更新Mesh和Material,以及Mask執行Cull的過程,耗時和發生變化的節點(動態節點)數量基本呈線性相關。

Canvas下UI節點數量較多時,如果節點都是靜態且不怎麼變動,那麼問題不大,Rebatch之後結果會進行緩存複用直到下一次節點變化;如果某些節點經常變動,會引起Canvas的Rebatch和Rebuild,CPU耗時就會相應增加。

Unity 5.2之後Rebatch的過程進行了優化,會根據設備CPU核心數量多線程執行,但是如果每隔幾幀就要Rebatch/Rebuild一次,耗時還是比較可觀的。例如UI元素含有Animator動畫,頻繁縮放、修改Sprite等等。這時候就建議將Canvas進行拆分,進行動靜分離等策略,詳細可以參考Unity官方優化UGUI的文檔:《Optimizing Unity UI》

感謝張迪@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/5ec4d3d24d93790618e0eda3


Texture

Q:請問爲什麼Crunched壓縮的貼圖在Unity Editor上顯示時,看起來比普通ETC格式小很多,但是在UWA報告中卻和普通ETC格式大小一樣呢?

A:Crunch壓縮是在ETC的基礎上的再次壓縮,在運行時會解壓爲ETC格式。在沒有開啓RW的情況,在內存中的大小和普通ETC是一樣的。但是當開啓了RW之後,情況就會稍微有些不一樣,內存中會保存兩份數據,一份是原始的Crunch的大小的佔用,一份是ETC的佔用。

舉例子來說,1024x1024的ETC2 8 bits格式的紋理,沒有開啓RW,在內存中佔用1MB,開啓RW,在內存中佔用2MB。1024x1024的Crunched ETC2格式的紋理,沒開啓RW,在內存中佔1MB,開啓了RW,在內存中佔1.137MB,其中0.137MB是原來的Crunch的大小,也是在Editor中看到的大小。所以使用Crunch可以減少包體大小,在開啓了RW的情況下也會降低內存的佔用。

該回答由UWA提供,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/5ec4b37a979400061e545323


Script

Q:我們線上運營着產品一代,最近iOS提交了二代,但是卻被4.3。請問大家是如何做二代三代產品的呢?難道完全重寫代碼嗎?

我來描述一下我們的情況:
一代和二代的美術資源是完全不一樣的,但是目錄結構是一樣的;
一代是純C#實現,二代是C#+ILRuntime;
假設一代有兩萬行代碼,那二代有大概四千行(因爲邏輯代碼都是ILRuntime腳本)。這四千行代碼包括:ILRuntime生成的兩千行,一千五百行代碼是和一代重複的,五百行完全不一樣的代碼。

這裏的代碼行數不包括插件的部分,例如:NGUI、USequnce、Protocol Buffers等。難道蘋果會因爲這一千五百行代碼判定重複應用嗎?只能徹底重寫這些代碼?我申訴了幾次但仍然維持了原判。

A:剛好最近公司某新項目提交也遇到了類似題主描述的4.3問題,分享下我們的解決方案。首先,最好判斷一下是機審還是人工審覈發出的4.3。這個很好區分,看服務器是否有登陸日誌就好。沒有登陸就是機審,否則就是人工。

對於機審4.3,一般是元數據相似度造成的,主要包括代碼、資源等IPA元數據內容的相似度。對於這種情況,題主可以針對自己項目的實際情況,選擇市面上各種混淆的技術對代碼、資源層面進行加密混淆,以提高元數據差異性。

對於人工審覈4.3,那就要根據服務器相關日誌,定位審覈人員體驗的遊戲內容做針對性地修改和回覆了,回覆主要需要向審覈人員表明相關功能設計的思路以及獨特性。

以上就是我們對4.3問題的改進的分享,總的來說,還是要根據蘋果審覈時的具體反應和自己項目的實際情況做出相應地修改,積極回覆纔有可能解決。

感謝Jerry@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/5ec619534d93790618e0edc7


Rendering

Q:場景使用Post Processing後,打AssetBundle包,PC平臺是正常的,但在移動平臺會報錯:Kernel ‘KGenLut3D_AcesTonemap’ not found。按照官方的解決方法還是不行,請問大家有遇到類似的問題嗎?有沒有解決的辦法?

 

A:這是Compute Shader的問題。先把Unity的平臺切換到你所需要的移動平臺,比如Android,然後刪除所有的Compute Shader,再重新更新下來,這樣就不報錯了。

經過上面的操作後,如果打包的時候還是報這個錯誤,就看下Player Setting裏面的Other Setting,需要將Graphics APIs設置成OpenGL ES3,打開Require ES3.1,因爲ES3.1才支持Compute Shader。

這裏的Compute Shader屬於PPSv2的Color Grading,我建議用Color Grading的另外一個不用Compute Shader的模式,因爲Compute Shader在手機上支持的並沒有那麼好。

感謝王爍@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/5ec4a5f6979400061e545322


Build

Q:文件或文件夾名字是下劃線開頭,放在Assets裏面用Gradle打包APK後解壓發現找不到。有沒有選項可以設置把_開頭的文件都打進去?

A:這是Android的規則:

可以嘗試在build.gradle裏面作如下修改,相當於去掉這個規則:

android {
    ...
    defaultConfig {
        ...
        aaptOptions {
            ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~'
        }
    }
}

感謝黃程@UWA問答社區提供了回答,歡迎大家轉至社區交流:
https://answer.uwa4d.com/question/5ec4d445979400061e54534b


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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章