日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小松教你手游开发】【unity实用技能】u3d 层次问题总结

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小松教你手游开发】【unity实用技能】u3d 层次问题总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先的首先,NGUI區分前后層次關系是用Depth值。已經跟z軸值無關

首先因為我自己用的是NGUI,所以我的u3d層次問題也就是NGUI的層次問題

先確定UI渲染順序,Camera>UIPanel>Depth(UIWidget)
這里的意思是,首先確定前后關系的是不同大塊之間的Camera的Depth值,根據Depth大小排列,這個決定了每個大塊之前的前后關系。
接著根據UIPanel的Depth前后排序,這個是用于每個大塊內可能有多個UIPanel分割成多個小塊,每個小塊間的前后關系。
最后是UIWidget(比如UILabel,UISprite,這些都繼承于UIWidget)的Depth值,在同一個UIPanel下,決定前后關系。

這里總結來說有兩個方面的問題:
1.整體的層次
2.UIPanel 間的層次

一、整體的層次:
整體的層次指的是一個游戲UI一般會分為幾個模塊,如Effect(特效)、Background、Main、Popup等。在這些大塊之間要區分前后關系時(比如Background最后,Main中間,Popup最前)就要區分到前后層次關系。這些層次一般會有同一個父節點UI_Root(不在同一個父節點也可以)

基本上整體的層次是根據Layer來分前后關系,Layer本身是不帶Depth,所以在這些大塊下,一般在他們的gameobj本身或者在他們下面會有個子節點Camera。通過Camera的CullingMask來確定這個Camera具體渲染哪個Layer下的東西。而通過這個Camera的Depth值來確定整體層次間的前后關系。

注意:在大塊的Camera之間如果Depth值相同時,z軸值會影響前后關系。但是這個應該是要避免的。不應該有相同Depth值得不同Camera

二、UIPanel 間的層次

網上有很多分析在不同Atlas(圖集)不同depth不同z軸值時的前后關系。但是如果知道為什么就能處理所有情況。這里解釋一下。

其實前后層次關系是怎么形成?是因為渲染順序的前后關系,越晚渲染的越在前面,所有通過把一個場景分割成幾塊,排一下渲染順序,按順序渲染就能使界面正常顯示而不導致遮擋錯亂,這樣就能控制好UI的層次關系。
而UIPanel的作用就是用來確定把什么東西放在一起渲染和UIPanel的Depth就是確定每一塊的渲染順序,最后生成一個Drawcall。
所以首先要解決的是把什么東西渲染到一塊,也就是一個Drawcall里面要渲染什么,一個UIPanel里要包括什么。

舉個例子:


像這個界面可以分成幾塊:

每一塊都可以分成一個UIPanel,每個UIPanel控制自己的Depth和透明度。可以處理好之間的遮擋問題。

以上是NGUI的基本渲染邏輯, 但是NGUI會自動把同一界面的同一張圖集的東西一起渲染,也就是不管你這里幾個UIPanel,UIPanel的Depth是3,4,5,還是30,40,50,只要是同一張圖集的就會一起渲染。再通過加成計算算出前后關系。但是這里會有一個問題,就是假如你有兩張圖集,兩張圖集的圖片的Depth相互交叉,這樣會導致NGUI無法識別同一圖集,導致渲染出錯,導致更多的Drawcall。

例:如果在同一個atlas的兩個sprite的depth不同比如1,3.在同一panel中有另一個atlas(比如字體)的depth在他們中間,比如2.就是
atlas1_sprite:depth 1
font_label:depth 2
atlas1_sprite:depth 3
這樣不是兩個drawcalls是三個

這個就是導致為什么在在不同情況下Depth會控制不了渲染順序的原因。
所以這里一般項目就會有一個比較取巧的方法避免。
1.UI只用一張圖集,2.字體的Depth放到300以上。

然后在完成一個UIPanel后需要檢查一下,Drawcall是否正常。這個可以在NGUI的工具里打開Drawcall Tool來查看。(目標是把相同圖集的Drawcall合并成一個)

之后的UIPanel的問題都會通過UIPanel和UIWidget的Depth來解決

轉載于:https://blog.51cto.com/13638120/2084899

總結

以上是生活随笔為你收集整理的【小松教你手游开发】【unity实用技能】u3d 层次问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。