Unity如何直接獲取深度緩沖


1)Unity如何直接獲取深度緩沖
​2)Unity Editor下SpriteAtlas加載的問題
3)無法將GameObject從Project窗口拖拽到SceneView窗口
4)UGUI的事件響應問題
5)iOS設置Texture2D的mipMapBias無效


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

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

Rendering

Q:查閱了一些資料,發現Unity獲取深度紋理好像都要對每個物體再渲染一次,有什么辦法能直接獲取到深度緩沖省去這一輪渲染嗎?或者直接復制深度緩沖。

A:可以,主要步驟如下:
1.將相機的顏色和深度Buffer通過Camera.SetTargetBuffers重新指向新的RT上(ColorBufferRT、DepthBufferRT);

2.通過CommandBuffer加一個AfterForwardOpaque的事件,將ColorBufferRT、DepthBufferRT Blit渲染到兩張新的RT上(后面渲染可以直接使用);

3.通過CommandBuffer加一個AfterEverything的事件,BlitColorBufferRT到CameraTarget上(保證屏幕正確)。

具體細節可參考:https://blog.csdn.net/linjf520/article/details/104964803

感謝范世青@UWA問答社區提供了回答


Texture

Q:使用的版本是Unity 2018.3.6f1下,Unity Editor模式下編輯Prefab,圖片會加載到內存中。導致一開始運行游戲的時候會觸發相關圖集SpriteAtlasManager.atlasRequested的提前調用,導致圖集加載錯誤。

 

上圖是過早的圖集加載,失敗時檢測到內存中加載的圖片。有沒有辦法在運行游戲的時候清除編輯預制體時內存中的圖片圖集?或者類似的辦法?

補充:在不運行游戲的情況下調用內存查看的接口,發現內存中仍然有很多圖片被加載:

 

A:這個問題本質是,當引用到Atlas的Sprite加載時,如果內存中沒有Atlas,就會觸發加載圖集的“請求”(atlasRequested)。Editor下編輯Prefab,會生成這個請求,在游戲運行的第一幀,這個請求函數會被調用,而這個請求是由Native層發出的([RequiredByNativeCode]),所以我們沒有辦法控制,跟卸載內存中的資源是沒有關系的。

 這個請求也只會在運行時的第一幀進行調用,所以,不要在第一幀注冊atlasRequested事件,在第一幀之后,或者在需要加載相應Prefab時注冊該函數,就可以避免在啟動游戲時調用該函數。

 

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


Editor

Q:最近發現Unity在打開公司的項目中,無法實現Project窗口拖拽GameObject到SceneView窗口,但是新建一個干凈的工程是可以拖拽過去的。猜測是不是因為某個工具或者插件引起的,但是插件和工具太多,逐個排查會比較浪費時間,想問問大佬們有沒有遇見過類似的問題?使用的Unity版本是2019.4。

正常的項目從Project窗口拖拽GameObject到SceneView窗口,圖標是這樣的:

 

出問題的是這樣的:

 

目前已經注釋掉外部工具或者插件的SceneView.duringSceneGui 、DragAndDrop相關代碼,問題依然存在。

A:出現問題的原因是:我們重寫了GameObject的Editor,沒有實現OnSceneDrag函數,不實現這個函數就會導致無法將物體從ProjectWindow拖拽到SceneView。

感謝題主馬三小伙兒@UWA問答社區提供了回答


UGUI

Q:UGUI RayCast的無繪制點擊在PC上沒有問題,但是到安卓手機上就穿透了,沒有點擊響應的問題。之前用透明通道為0的Image就都沒問題。

腳本如下:

 

A:可以把Image的半透明度設置為0,勾選Canvas Renderer上的Cull Transparent Mesh,這樣就可以不進行繪制也能響應點擊事件的。(另外,測試了了題主的代碼,在小米9上沒有出現問題。)

 

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


Texture

Q:使用TextureMipmapStreaming,在iOS真機上,設置Texture2D的mipMapBias無效,這個Texture是從Material中拿到的mainTexture,在Editor下反而生效(圖片會變模糊和清晰)。

版本是Unity2018.4.13,有人遇到同樣的問題嗎?相關設置見下圖:

 

  

 

A:這個要開啟Texture.streamingTextureDiscardUnusedMips = true,不然在內存預算足夠的情況下,是不會丟棄高精度的貼圖的。

感謝梅辰@UWA問答社區提供了回答

 

封面圖來源:Multipass Translucency
https://lab.uwa4d.com/lab/5b560e9ed7f10a201fd7f44f


今天的分享就到這里。當然,生有涯而知無涯。在漫漫的開發周期中,您看到的這些問題也許都只是冰山一角,我們早已在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