Q1:Unity對GameObject.active()這個底層具體做了什麼?因為在優化項目的時候看見有些界面active()這個函數造成的開銷比較高,我采取的辦法是移除錄影機的範圍,這是參照UWA以前文章找到的辦法,但是我還是想知道Unity對Active底層具體做了哪些操作,否則會有點困惑。
有一點可以明确的是,至少SetActive後,如果GameObject被激活,那麼會調用該GameObject和所有子GameObject上的所有元件的OnEnable函數。而各種不同的UI元件的OnEnable中也有各種不同的操作。 如果題主希望深入研究下,可以看一下NGUI或者UGUI的源碼,OnEnable具體做了什麼都可以看到。同時,針對UI界面而言,還會在同一幀裡觸發其他的相關函數,出現後續的開銷,如UGUI裡的SendWillRenderCanvases和NGUI裡的UIPanel.LateUpdate。
該問題來自UWA 社群,如您對該問題仍有疑問,可以轉至社群進行進一步交流。
https://answer.uwa4d.com/question/5996b23886e632f11f9c1582
Q2:還是老生常談的晝夜變換效果,需要兩份Lightmap來lerp。開始我認為,隻要模型不變,烘培參數不變,如果隻改變燈光,Lightmap的分布是一樣的(事實上開始測試的幾個小場景也的确沒問題)。但是在某個大場景烘培2份LM的時候,發現部分物體UV2分布的位置變了。請問,在不手動分uv2的情況下,是否有辦法鎖定UV2分布?因為資源量比較大,美術人員不希望手動分UV2。
根據我的實踐結論,如果場景物體沒有移動,沒有改變過Lightmap Scale,光罩面闆裡的分辨率等參數也保持不變,隻是燈光位置和參數發生了變化,那麼是不會引起物體的光照Index和Scale 這兩個參數的變化。但是為了避免多次渲染,最好連續為不同光線條件進行渲染,以防無意移動了某個物體,造成整份渲染無用。另外手動儲存Index,Scale兩個參數好像也是無效的,因為如果缺少場景同名檔案夾内的Lightmapping Asset的那個光照檔案,場景光照貼圖就無法加載,而且通常我們場景内的物體是要批量靜态的,而批量了後的物體是無法手動指派Index和Scale這兩個參數的。 執行個體:我的項目中![]()
技術分享連載(七十六) ![]()
技術分享連載(七十六) 這三套光照貼圖都是公用一套"UV"的,在編輯器中還可以自己寫個Editor腳本來靜态加載調試。![]()
技術分享連載(七十六) ![]()
技術分享連載(七十六)
此問答來自于UWA 問答社群,感謝 ID為 Blandon 的朋友提供了相關回答,如您對該問題仍有疑問,可以轉至社群進行進一步交流。
https://answer.uwa4d.com/question/5992e3aae85f22ea2dc0c603
Q3:我們在iPhone5c上測試時發現Font.CacheFontForText會造成很嚴重的卡頓,看了UWA的Blog,了解到可能是因為建立FontTexture導緻的開銷。那是否可以認為如果我們一開始申請了足夠大的Font Texture,後面即便有新的文字,開銷也不會很大? 如果可以這麼做,一開始申請使用的字元串是根據自己項目生成一個字典,還是直接使用網上3、4千字的常用字庫更好?
是的,如果Font.CacheFontForText開銷較大,那麼在無法降低字型數量的情況下,一開始增大Font Texture是較為可行的方法。建議根據自己項目的字型來撐大Font Texture,避免不必要的浪費。 同時,也建議看一下這篇關于字型的精簡優化方法。
此問答來自于UWA 問答社群,如您對該問題仍有疑問,可以轉至社群進行進一步交流。
https://answer.uwa4d.com/question/59917a6e1ae4fee75dc97e3d
Q4:有什麼辦法可以擷取到MemoryProfiler裡的Other那項裡面的Objects和SerializedFile的詳情資訊呢?
目前Unity引擎是沒有API來擷取這兩處的詳細資訊的。 不過,對于Objects的大小,一般來說不需要去特别注意,因為在真機上是沒有的。 而SerializedFile下面主要是AssetBundle的具體使用情況,可在UWA線上性能檢測版本中檢視詳細每幀的AssetBundle的使用情況,如下圖所示。![]()
技術分享連載(七十六)
原文出處:侑虎科技
本文作者:admin
轉載請與作者聯系,同時請務必标明文章原始出處和原文連結及本聲明。