1)開啓Allow unsafe code的影響
2)Unity線性空間下,PhotoShop製做半透明圖片,製做帶外發光、內發光的圖層如何正確導出
3)Unity中實現完善的暫停機制
4)RenderPipelineManager.DoRenderLoop_Internal的堆內存優化
5)Unity 2020版本中ARBackgroundRenderer和ARRenderMode的相應替代類安全
這是第223篇UWA技術知識分享的推送。今天咱們繼續爲你們精選了若干和開發、優化相關的問題,建議閱讀時間10分鐘,認真讀完必有收穫。網絡
UWA 問答社區:answer.uwa4d.com
UWA QQ羣2:793972859(原羣已滿員)框架
Q:最近項目引進幾個插件,以及學習別人的插件,代碼中用到了unsafe關鍵字,須要再project settings中勾選Allow unsafe code,以前知道一點是不勾選最好,可是勾選之後到底哪裏很差也忘了,也沒有勾選以後上線來驗證,因此問問你們,是否應該勾選,以及勾選以後有何影響?函數
A:勾了沒什麼實際上的壞處,只是因爲.net當初設計的時候是不鼓勵使用unsafe代碼的,因此在編譯器默認設置這個門檻,鼓勵你們儘量使用安全的代碼(也就是不要直接操做原生內存地址)。可是,不少高性能的C#代碼爲了最大限度地高效訪問內存,不可避免要用unsafe,只要保證unsafe代碼被限制在較小的範圍並嚴格測試保證不會出內存訪問錯誤,對整個工程來講就不是大問題。oop
感謝招文勇@UWA問答社區提供了回答性能
Q:你們好,由於項目是PBR項目,因此Unity使用線性空間,如今在製做UI的時候,帶透明通道的圖片,混合時候就會出錯。學習
咱們先後試了幾種方法:
1. 改PhotoShop的工做空間爲線性的,定義Gamma爲1.0:
2. 單獨改用灰度係數混合RGB顏色:1.00,這樣大部分狀況下,Unity中效果PhotoShop中效果就是一致的:
3. 改Unity渲染管線。測試
以上方法都有一些侷限和問題。優化
1. 普通不透明圖層有些漸變效果沒法繪製,由於線性空間下的暗部顏色精度不夠;
2. PhotoShop製做帶外發光、內發光的圖層合併以後會錯誤:動畫
3. 由於用的仍是內置Forward管線,影響太大,低端機效率低下,暫不考慮。
咱們最終採用的是第二種,美術仍是在Gamma工做空間做圖,只是圖層混合採樣。
最後想問下你們,針對線性空間下的半透明圖層如何導出?
或者有沒有什麼辦法能處理這種外發光、內發光圖層問題?
A1:目前公司項目都採用Linear方式,美術直接修改PhotoShop設置,出圖事後,在Unity中測試,能與原圖是一個色彩,以前也嘗試過其餘辦法,如Shader修正,可是都有必定的問題,目前採用的這種方案,暫未發現問題。
感謝範超@UWA問答社區提供了回答
A2:用下圖的配置,在PhotoShop CC 2019裏試了下,只要不合並圖層,直接導出png,再放到Unity中就沒有問題。另外如問題中的例子,只要從下向上合併圖層(帶着背景),最終結果就沒問題。多是PhotoShop的Bug。
就我和美術瞭解的狀況,他們不多合併圖層。通常導出就是把不須要的圖層隱藏了。因此這種狀況應該是能夠避免的。
感謝張首峯@UWA問答社區提供了回答
Q:目前使用TimeScale=0來暫停遊戲,可是在UI上不想讓特效和動畫暫停,而在某些戰鬥場景,只但願暫停一部分邏輯。若是把TimeScale=0,就要處理ParticleSystem、TrailRenderer、Spine動畫等組件,特別是TrailRenderer和Spine都須要修改源碼。若是不用TimeScale=0, 是否是就要在框架層就處理好各模塊的更新邏輯?
A1:常規的作法確實就如你說的,不用TimeScale=0,各個地方去實現暫停,而後統一管理。
感謝鄧永健@UWA問答社區提供了回答
A2:可參考這篇文章: 《Unity Chronos - Time Control 時間控制器》
感謝黃程@UWA問答社區提供了回答
Q:項目採用了URP,用UWA進行了初步測試,發現RenderPipelineManager.DoRenderLoop_Internal分配了不少堆內存,這個函數是URP中的內置函數嗎?應該如何定位問題進行優化?
A:這個函數是內置用於SRP的總函數,不過度配堆內存的頗有多是題主本身寫的C#函數。從圖中來看,目前堆內存分配的太多了,建議經過GOT(Online)中的Mono模式來進行測試,就能夠看到其具體的堆內存分配狀況了。經過「倒序」查看方式,能夠直接查看分配的最低級子函數,以下圖所示。
以上回答由UWA提供
Q:請問下,如下這兩個類如今有替代類嗎?是怎麼規劃處理的?
UnityEngine.XR.ARBackgroundRenderer
UnityEngine.XR.ARRenderMode
以上這兩個類經測試:
Unity版本:2020.1.4f1c1,找不到;
Unity版本:2019.4.7f1,找獲得。
我又試了下當前最新的Untiy 2020.2.0b6版本這兩個類也沒有。
看了些資料,Unity 2020版本後,這兩個類應該就被刪除了。
A:Unity新版本將不少功能都是以Package的方式導入,關於AR從PackageManager中導入AR Foundation包,ChangeLog中有提到ARBackgroundRenderer已經在某個版本重命名爲ARCameraBackground,AR/VR開發可能須要熟悉一下相關的Package,以下圖:
感謝羽飛@UWA問答社區提供了回答
封面圖來源於網絡
今天的分享就到這裏。固然,生有涯而知無涯。在漫漫的開發週期中,您看到的這些問題也許都只是冰山一角,咱們早已在UWA問答網站上準備了更多的技術話題等你一塊兒來探索和分享。歡迎熱愛進步的你加入,也許你的方法恰能解別人的燃眉之急;而他山之「石」,也能攻你之「玉」。
官方技術QQ羣:793972859(原羣已滿員)