一羹唠、 World Space(世界坐標(biāo))
我們?cè)趫?chǎng)景中添加物體(如:Cube)盈匾,他們都是以世界坐標(biāo)顯示在場(chǎng)景中的狰挡。transform.position可以獲得該位置坐標(biāo)鹅龄。
- 代碼獲取的transform.position都是一致的無(wú)論是3d還是2d,ugui/ngui漆诽,父子關(guān)系侮攀,transform.position都是以場(chǎng)景中心(0,0)的位置開(kāi)始計(jì)算,單位長(zhǎng)度也都是一樣的厢拭。無(wú)論怎樣的UI兰英,怎樣的層級(jí)關(guān)系,代碼里輸出Debug.log(go.transform.position)供鸠,輸出的總是相對(duì)于場(chǎng)景中心(0,0)的距離畦贸,也是獲取世界坐標(biāo)的方法。
x軸:左負(fù)右正
y軸:上正下負(fù)
z軸:里正外負(fù)
- 檢視面板的position數(shù)值和代碼獲取的position數(shù)值不一致,ngui和ugui的Transform和Recttransform的position顯示的數(shù)值和代碼里獲取transform.position不一致楞捂。
ugui btn代碼位置position=new Vector(1,0,0)薄坏,面板顯示(31.3,0,0)
ngui btn代碼位置position=new Vector(1,0,0),面板顯示(371,0,0)
具體比例不是很清楚寨闹,可能和測(cè)試環(huán)境有關(guān)颤殴。
- 父子關(guān)系的容器,檢視面板position和代碼獲取position不一致,cube和ngui/ugui的子對(duì)象的Transform/Recttansform在檢視面板中顯示的Position數(shù)值是相對(duì)于父容器的鼻忠,但是代碼里獲取的Transform/RectTransfrom的position是相對(duì)于場(chǎng)景中心的。
獲取世界坐標(biāo):go.transform.position
獲取本地坐標(biāo):go.tranfrom.localPosition (cube/ngui/ugui杈绸,無(wú)論層級(jí)關(guān)系帖蔓,都是獲取的是檢視面板中的坐標(biāo))
可推斷ugui/ngui都是在場(chǎng)景中的一個(gè)容器之中,所以檢視面板顯示的都是相對(duì)于父容器的坐標(biāo)瞳脓,而不是世界坐標(biāo)塑娇。
二、Screen Space(屏幕坐標(biāo))
Screen Space是以像素來(lái)定義的劫侧,以屏幕的左下角為(0埋酬,0)點(diǎn)哨啃,右上角為(Screen.width,Screen.height)写妥,Z的位置是以相機(jī)的世界單位來(lái)衡量的拳球。
鼠標(biāo)位置Input.mousePosition獲取的是屏幕坐標(biāo)。例如場(chǎng)景分辨率1024x768珍特,如果屏幕被縮小至100x100祝峻,那么點(diǎn)擊右上角是100x100,而不是分辨率的1024x768扎筒。
三莱找、ViewPort Space(視口坐標(biāo))
視口坐標(biāo)是標(biāo)準(zhǔn)的和相對(duì)于相機(jī)的。相機(jī)的左下角為(0嗜桌,0)點(diǎn)奥溺,右上角為(1,1)點(diǎn)骨宠,Z的位置是以相機(jī)的世界單位來(lái)衡量的浮定。
四、繪制GUI界面的坐標(biāo)系
這個(gè)坐標(biāo)系與屏幕坐標(biāo)系相似诱篷,不同的是該坐標(biāo)系以屏幕的左上角為(0壶唤,0)點(diǎn),右下角為(Screen.width棕所,Screen.height)闸盔。
Other、坐標(biāo)轉(zhuǎn)換
世界坐標(biāo) -> 本地坐標(biāo):貌似不用轉(zhuǎn)琳省,直接可以position和localPosition獲取迎吵。
本地坐標(biāo) -> 世界坐標(biāo):
世界坐標(biāo)→屏幕坐標(biāo):camera.WorldToScreenPoint(transform.position);這樣可以將世界坐標(biāo)轉(zhuǎn)換為屏幕坐標(biāo)。其中camera為場(chǎng)景中的camera對(duì)象针贬。
屏幕坐標(biāo)→視口坐標(biāo):camera.ScreenToViewportPoint(Input.GetTouch(0).position);這樣可以將屏幕坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)击费。其中camera為場(chǎng)景中的camera對(duì)象。
視口坐標(biāo)→屏幕坐標(biāo):camera.ViewportToScreenPoint();
視口坐標(biāo)→世界坐標(biāo):camera.ViewportToWorldPoint();
父子對(duì)象關(guān)系:
SetParent(Transform parent, bool worldPositionStays);
false:不保留世界坐標(biāo)桦他。改變層級(jí)關(guān)系后蔫巩,坐標(biāo)數(shù)值不變,位置變化快压,會(huì)相對(duì)于父對(duì)象移動(dòng)圆仔。
true(默認(rèn)):世界坐標(biāo)不變。改變層級(jí)關(guān)系后蔫劣,不會(huì)移動(dòng)坪郭。