一、 World Space(世界坐標(biāo))
我們在場景中添加物體(如:Cube),他們都是以世界坐標(biāo)顯示在場景中的。transform.position可以獲得該位置坐標(biāo)。
- 代碼獲取的transform.position都是一致的無論是3d還是2d,ugui/ngui,父子關(guān)系,transform.position都是以場景中心(0,0)的位置開始計算,單位長度也都是一樣的。無論怎樣的UI,怎樣的層級關(guān)系,代碼里輸出Debug.log(go.transform.position),輸出的總是相對于場景中心(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)
具體比例不是很清楚,可能和測試環(huán)境有關(guān)。
- 父子關(guān)系的容器,檢視面板position和代碼獲取position不一致,cube和ngui/ugui的子對象的Transform/Recttansform在檢視面板中顯示的Position數(shù)值是相對于父容器的,但是代碼里獲取的Transform/RectTransfrom的position是相對于場景中心的。
獲取世界坐標(biāo):go.transform.position
獲取本地坐標(biāo):go.tranfrom.localPosition (cube/ngui/ugui,無論層級關(guān)系,都是獲取的是檢視面板中的坐標(biāo))
可推斷ugui/ngui都是在場景中的一個容器之中,所以檢視面板顯示的都是相對于父容器的坐標(biāo),而不是世界坐標(biāo)。
二、Screen Space(屏幕坐標(biāo))
Screen Space是以像素來定義的,以屏幕的左下角為(0,0)點,右上角為(Screen.width,Screen.height),Z的位置是以相機(jī)的世界單位來衡量的。
鼠標(biāo)位置Input.mousePosition獲取的是屏幕坐標(biāo)。例如場景分辨率1024x768,如果屏幕被縮小至100x100,那么點擊右上角是100x100,而不是分辨率的1024x768。
三、ViewPort Space(視口坐標(biāo))
視口坐標(biāo)是標(biāo)準(zhǔn)的和相對于相機(jī)的。相機(jī)的左下角為(0,0)點,右上角為(1,1)點,Z的位置是以相機(jī)的世界單位來衡量的。
四、繪制GUI界面的坐標(biāo)系
這個坐標(biāo)系與屏幕坐標(biāo)系相似,不同的是該坐標(biāo)系以屏幕的左上角為(0,0)點,右下角為(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為場景中的camera對象。
屏幕坐標(biāo)→視口坐標(biāo):camera.ScreenToViewportPoint(Input.GetTouch(0).position);這樣可以將屏幕坐標(biāo)轉(zhuǎn)換為視口坐標(biāo)。其中camera為場景中的camera對象。
視口坐標(biāo)→屏幕坐標(biāo):camera.ViewportToScreenPoint();
視口坐標(biāo)→世界坐標(biāo):camera.ViewportToWorldPoint();
父子對象關(guān)系:
SetParent(Transform parent, bool worldPositionStays);
false:不保留世界坐標(biāo)。改變層級關(guān)系后,坐標(biāo)數(shù)值不變,位置變化,會相對于父對象移動。
true(默認(rèn)):世界坐標(biāo)不變。改變層級關(guān)系后,不會移動。