參考
Unity進(jìn)階技巧 - RectTransform詳解
Unity——RectTransform詳解
屏幕適配實(shí)用技巧
揭秘肋僧!anchoredPosition的幾何意義已卸!
localPosition與anchoredPosition轉(zhuǎn)化之瞎貓找死耗子
一鼓寺、Pivot軸心
首先為了讓大家更好的理解內(nèi)容,我在Unity中創(chuàng)建了兩個(gè)UI控件铃辖,一個(gè)Plane控件,作為父對象香到,一個(gè)Image控件闪水,最為子對象,如下圖:
Pivot我們可以暫且稱它為中心軸(這個(gè)翻譯不太準(zhǔn)確跃须,但為了便于理解站叼,先這么叫著),它是一個(gè)X,Y值范圍是0到1的點(diǎn)菇民,這個(gè)點(diǎn)的會在Anchor(錨點(diǎn))計(jì)算位置的時(shí)候會使用到尽楔,下面用一張圖來解釋Pivot點(diǎn)的位置
旋轉(zhuǎn)投储、大小和縮放修改發(fā)生在主軸Pivot點(diǎn)周圍,因此Pivot的位置會影響旋轉(zhuǎn)翔试、調(diào)整大小或縮放的結(jié)果轻要。
二复旬、Anchor
關(guān)于Anchor錨點(diǎn)可能接觸過UI的朋友都了解一些垦缅,但是Unity中Anchor應(yīng)該稱它為錨框更為合理,因?yàn)樗怯蓛蓚€(gè)錨點(diǎn)(Min驹碍,Max)組成的一個(gè)矩形壁涎,當(dāng)然也可以組成一個(gè)點(diǎn)(兩個(gè)點(diǎn)重合)
當(dāng)然上圖是兩個(gè)錨點(diǎn)重合的情況,所以看上去是一個(gè)點(diǎn)志秃,下面我們利用兩個(gè)錨點(diǎn)不重合的情況來說明一下:
三怔球、Pivot和Anchor的結(jié)合
在了解了Pivot和Anchor分別是什么后,我們就來看看Unity是如何使用這個(gè)兩個(gè)東西來控制UI的布局
1.第1種情況:兩個(gè)錨點(diǎn)重合時(shí)
我們先來看看兩個(gè)錨點(diǎn)重合時(shí)的情況浮还,這種情況是我們最常用也是最容易理解的方式
我們將Anchor錨點(diǎn)放在黑框的正中間竟坛,然后將Pivot中心軸放在紅框的正中間,然后我們改變黑框的大小和位置钧舌,看看紅框會有什么變化担汤,如下圖:
我們從上圖可以看出,不管我們怎么拖動黑框洼冻,改變他大小和位置崭歧,紅框的Pivot點(diǎn)到Anchor點(diǎn)的距離是始終不變的,也就是說紅框物體會參照錨點(diǎn)來實(shí)時(shí)調(diào)整自己的位置撞牢,使自己的Pivot點(diǎn)到錨點(diǎn)的距離始終保持一致率碾,而且值得一提的是,在這種情況下屋彪,紅框物體的RectTransform組件中的屬性是Width和Height所宰,這個(gè)屬性在后面的情況中會發(fā)生變化,大家需要注意下
總結(jié)下第1種情況的特點(diǎn)就是:子物體的大小不會隨著父物體的大小變化而變化畜挥,但是位置會根據(jù)Pivot點(diǎn)到Anchor點(diǎn)的距離一致的原則發(fā)生對應(yīng)的變化
2.第2種情況:兩個(gè)錨點(diǎn)不重合時(shí)歧匈,即錨框的情況
當(dāng)兩個(gè)錨點(diǎn)(AnchorMin和AnchorMax)不重合時(shí),兩點(diǎn)就會確定一個(gè)矩形砰嘁,這個(gè)矩形就是我們的錨框件炉,如下圖中的綠框就是我們的錨框區(qū)域
此時(shí)我們再觀察一下紅框物體的RectTransform屬性,發(fā)現(xiàn)屬性分別變成了Left矮湘、Top斟冕、Right、Bottom
那么這4個(gè)屬性分別表示什么呢缅阳?我們看看下面的這個(gè)圖
從上圖我們看出磕蛇,Unity以錨框的左下角為坐標(biāo)系的原地(0, 0)景描,然后紅框的Left和Bottom兩個(gè)數(shù)確定紅框左下角的點(diǎn)在坐標(biāo)系中的位置,原點(diǎn)和紅框左下角的點(diǎn)確定一段距離(即上圖的綠色箭頭)秀撇,不管黑框如何變化超棺,這段距離都保持不變
同理,如上圖所示呵燕,Unity以錨框的右上角為原點(diǎn)(0,0)棠绘,然后紅框的Right和Top兩個(gè)數(shù)確定紅框的右上角的在坐標(biāo)系中的位置,原地和紅框的右上角的點(diǎn)確定一段距離(即上圖的綠色箭頭)再扭,不管黑框如何邊框氧苍,這段距離都保持不變
在黑框大小和位置變化的時(shí)候,Unity會保證紅框的左下角到錨框的左下角距離不變泛范,同時(shí)紅框的右上角到錨框的右上角距離不變让虐,來確定紅框的相對位置和大小,看下圖來感受一下變化:
注意上圖中紅框左下角到黑框左下角的距離罢荡,以及紅框右上角到黑框右上角的距離赡突,他們都是不變的
3.預(yù)置常見布局方式
快速設(shè)置Anchor,加快捷鍵能同時(shí)設(shè)置pivot或position
4.Unity中對UGUI錨點(diǎn)的理解
- 四個(gè)錨點(diǎn)区赵,相對于四根釘子惭缰,釘在Image的父級元素上。
- 四個(gè)實(shí)心藍(lán)點(diǎn)惧笛,相當(dāng)于四個(gè)紐扣从媚,縫在Image的四個(gè)邊上。
- 錨點(diǎn)和紐扣之間被四根無形的鋼絲鏈接患整,注意是鋼絲拜效,因?yàn)椴粫炜s。
- 如果把Image調(diào)整好了大小各谚,現(xiàn)在想讓他隨著屏幕的變化進(jìn)行縮放紧憾,那么就把四個(gè)錨點(diǎn),拖拽到四個(gè)紐扣上昌渤,相對于把Image的四個(gè)角釘在了父級元素上赴穗,父級元素縮放就會拽著Image進(jìn)行縮放,比例是一致的膀息。
- 錨點(diǎn)合并在一起般眉,相當(dāng)于把Image四個(gè)角往同一個(gè)方向拽,所以不會改變Image的大小潜支。
5.Unity——RectTransform詳解
unity中的ui元素是有嚴(yán)格的父子關(guān)系的甸赃,子物體的位置是根據(jù)父物體的變化而變化的,而子物體和父物體聯(lián)系的橋梁就是Anchor冗酿。之所以anchorMax和anchorMin的值是小數(shù)埠对,是因?yàn)槠浔碚鞯氖窃擖c(diǎn)所在位置占父物體大小的比例络断。
a.絕對布局
所謂的絕對布局,就是出現(xiàn)錨點(diǎn)的情況项玛,此時(shí)的recttransform面板中的屬性變成PosX,PosY,PosZ,Width,Height貌笨,這五個(gè)屬性,首先說說Width和Height襟沮,在絕對布局的情況下無論分辨率是多少锥惋,父物體多大,該UI元素的大小是恒定的臣嚣,如下圖所示
b.相對布局
所謂相對布局净刮,就是出現(xiàn)錨框的情況剥哑。在這種情況下UI元素的四個(gè)角硅则,距離四個(gè)對應(yīng)的錨點(diǎn)的距離是不變的,在這種情況下RectTransform的屬性又變?yōu)榱薒eft,Top,Right,Bottom,PosZ株婴,其中的PosZ表征的是該元素到父物體在Z軸上的偏移怎虫,利用這個(gè)值可以調(diào)整UI元素的顯示順序,不過我用的不多困介,這里不作太多討論大审。剩下的四個(gè)值應(yīng)該很好理解了,就是UI元素的每一條邊距離父物體的每一條邊的距離座哩。
四徒扶、anchoredPosition屬性詳解
anchoredPosition根據(jù)名字的含義,我們大概可以猜出他是根據(jù)anchor錨點(diǎn)得出來個(gè)一個(gè)位置屬性根穷,他本身是一個(gè)點(diǎn)姜骡,如果在AnchorMin和AnchorMax是重合的情況下,anchoredPosition就是表示錨點(diǎn)到Pivot的位置屿良,如下圖所示:
但是如果AnchorMin和AnchorMax不重合的時(shí)候圈澈,anchoredPosition就比較復(fù)雜了,在這種情況下尘惧,Unity會根據(jù)Pivot康栈、AnchorMin和AnchorMax計(jì)算出一個(gè)錨點(diǎn),然后在通過Pivot和錨點(diǎn)來得出anchoredPosition的位置
五喷橙、offsetMin和offsetMax詳解
offsetMin和offsetMax這兩個(gè)屬性比較好理解啥么,其中offsetMin表示物體(本文中的紅框)左下角相對AnchorMin的偏移,offsetMax表示物體右上角相對AnchorMax的偏移
六贰逾、sizeDelta詳解
sizeDelta就是offsetMax - offsetMin的值悬荣,即物體左下角到右上角的變量,如下圖所示: