GUI中是用depth來控制sprite顯示順序的,本來這很好用,但碰到上面帖子中的問題時卻不好解決了,于是我試驗了下。以下是一些總結,不對的地方請指正。
下面的內容可能看起來比較繞,這樣的話只需實際試驗下就能很容易的知道結果,呵呵
如果還是看不明白,可以先看1樓,那里有個總結
1,同一個panel下,同一個atlas的不同sprite的顯示只受depth的控制,這是最經常用的方式。此時不論精靈的z軸如何變化,depth高的一定在前面。
比如精靈A的z軸是-10,更靠近相機,但它的depth是0,而精靈B的z軸是0但depth是1,那么精靈B還是顯示在前面
如下圖,0、1、2的前綴分別是三者的depth值,則三者的排列就是如圖的由下到上,2_Label在最上面
現在在depth不變的前提下修改z軸的值。將0_Dark的z軸調為-100,則它離相機更近了,看上去應該擋住后面的兩個才對,但Game場景中三者的關系并沒有改變,也就是說雖然看上去0_Dark應該擋住后面的東西,但并沒有這樣,還是depth起作用,也就是feiben同學所說的“相同atlas其實是共用同一個Z軸深度”。

2,不同panel下,同一個atlas的不同sprite不受depth的控制,而受z軸控制。此時只需稍微調節下其中一個精靈的z軸就可以,比如0.1,就可以控制sprite的顯示
比如接著1中的圖,新建一個panel_B,將1_NGUI拖到里面,會看到它蓋住了0和2,現在調節depth不起作用,無論1_NGUI的depth調成多少,都不會改變它在最上面的狀態

現在調節下1_NGUI的z軸為0.1,則它到了最后面

而比如現在想把在panel_B中的1_NGUI重新顯示在0和2之間,能辦到么?經過試驗會發現無論怎么調三者的z軸,都不能將NGUI放到1和2之間,因為它們是一個圖集中的精靈,共用一個z軸深度
比如將0_Dark的z設為100,此時1_NGUI的z軸還是0.1,但1_NGUI重新跑到了最上面,而不是中間

再把Label的z設為-100,NGUI是被覆蓋了,但Dark也跟著跑到了上面,注意此時三者的空間位置,NGUI的確是在中間的,但還是被后面的Dark擋住了

你也許會感覺這是自找麻煩,沒事把同一個atlas的精靈放到兩個panel中干什么呢?一般情況下是自找麻煩,但為了解決上面帖子中提到的問題,這是個解決的辦法,如3
3,不同panel下,不同atlas的精靈的穿插,受z軸的控制。
現在回到帖子中提出的問題,怎么讓多個atlas的sprite能進行穿插。辦法是用多個panel。
比如有兩個atlas,分別為SiFi和Wooden,而SiFi中有兩個要顯示的精靈Dark和Label,Wooden中有一個要顯示的精靈wooden,現在想把wooden放到Dark和Label之間。那么設置兩個panel,一個放Dark和wooden,另一個放Label,或者一個放Label和wooden,另一個放Dark,只要SiFi圖集中的兩個精靈不在同一個panel中就可以,之后微調其中一個精靈的z軸就可以了,比如調節Label的z軸為-0.1,則如下圖,wooden到了Dark和Label的中間
不過如果認為為什么要這么麻煩呢,只需要在一個panel中調節就可以了,那就回到了2中的問題上,總是在上或在下,而不會在中間
如下圖,三者在一個panel下,現在空間位置是wooden在中間z為0,Dark為100,Lable為-100,且三者的depth也是相應的,但wooden還是在最上面
現在修改下wooden的z軸,比如改為1,而Dark和Label的z不變,則wooden跑到了最后面,但就是不到中間去

此外,即使用兩個panel,但同是SiFi圖集中的Dark和Label還是在同一個panel下,而把wooden放到另一個panel中,還是無法達到插入的目的,如下圖,無論怎么調節wooden的z軸,它要么在最前面,要么在最后面

此時只需把Dark或Label之一放到wooden的panel下就能實現wooden在中間的目的,比如把Dark和wooden放到一起

而現在有個有趣的想法,就是既然這樣可以達到wooden在中間的目的,那能不能把label放到兩者中間呢?試一下就知道,是可以的。而既然這樣,那Dark能放到兩者中間么,試一下,還是可以的。這就讓定位更加靈活
當然這是最簡單的穿插,如果有多個panel和多個atlas的話情況會比較復雜,此時要記著2中的情況,否則還是容易出現無法穿插的問題。而解決這個問題的方法最好還是atlas設計的時候更全面,讓穿插的sprite在一個atlas中,這樣只用depth深度就可以控制了
4,同一個panel下,不同Atlas的sprite,受z軸控制,depth不起作用。而默認添加的時候覆蓋關系似乎和atlas有關,比如從SiFi圖集和Wooden圖集中分別添加任意一個精靈到同一個panel下,總是SiFi的精靈在下面,此時depth不起作用,可以直接調節z軸比如-0.1就可以
5,(修改)對于panel是否會產生drawcall,之前的試驗存在誤區,當時是直接復制帶著sprite的Panel,這的確會產生新的drawcall,這是因為在復制時panel的scale被修改了,由1變成了0.9999304之類的,這會導致drawcall增加了1個,而之后再復制這個由復制產生的panel,scale還是0.9999304,所以drawcall不會再變。
現在發現修改panel的縮放scale的確會增加drawcall。所以如果為了方便而復制一個panel的話,別忘了reset它的縮放
而之所以對panel是否會產生drawcall,是因為官方例7中只用了2個Atlas,但drawcall卻是5個,當時簡單的認為是panel的問題。