Unity學(xué)習(xí)筆記(五)之坐標(biāo)系

一、 World Space(世界坐標(biāo))

我們在場景中添加物體(如:Cube),他們都是以世界坐標(biāo)顯示在場景中的。transform.position可以獲得該位置坐標(biāo)。

  1. 代碼獲取的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ù)

  1. 檢視面板的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)。

  1. 父子關(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)系后,不會移動。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 一、Unity3D中有哪些坐標(biāo)系? 坐標(biāo)系這個概念最早是由法國數(shù)學(xué)家笛卡爾提出的,并由此創(chuàng)造了用代數(shù)方法來研究幾何...
    OneMore2018閱讀 4,612評論 0 7
  • 無論是2d還是3d游戲開發(fā),圖形學(xué)都是基礎(chǔ),解析幾何的基本思想是將幾何圖形抽象成點的運動軌跡,從而點可以作為組成圖...
    tmgg閱讀 12,907評論 2 4
  • 該系列筆記基于Unity3D 5.x的版本學(xué)習(xí),部分API使用和4.x不一致。 目前在Unity3D中,除了新的U...
    某人在閱讀 2,437評論 0 2
  • 3D坐標(biāo)系是在做3D項目開發(fā)中的基礎(chǔ)概念,一般來說3D軟件或者開發(fā)工具都是采用笛卡爾坐標(biāo)系來描述物體的坐標(biāo)信息。笛...
    S_H_C閱讀 6,468評論 0 6
  • 一 、世界坐標(biāo)系--全局坐標(biāo)系: 用來描述游戲場景內(nèi)所有物體位置和方向的基準(zhǔn),也稱為世界坐標(biāo)系。Unity場景中創(chuàng)...
    _涼笙閱讀 5,278評論 0 4