Unity 3D坐標(biāo)系轉(zhuǎn)換
在Unity中我們通常會用到以下幾個坐標(biāo)系下的點:
-
世界坐標(biāo)系:World Space
簡單來講,我們通過 transform.position | transform.rotation 獲取得到的位置和旋轉(zhuǎn)信息都是基于世界坐標(biāo)系的,可以說,我們的很大一部分操作都是基于世界坐標(biāo)系。 -
觀察坐標(biāo):Eye Space
我們在Unity的Game視圖中觀察的畫面始終是由攝像機提供的,基于攝像機的一個坐標(biāo)系也就是"Eye Space"(簡單來講就是把攝像機看作原點位置)。 -
視口坐標(biāo):View Port
視口是針對游戲顯示的畫面進行描述的,View Port用于描述整個游戲畫面的坐標(biāo),左下角為(0,0),右上角為(1,1),我們在設(shè)計分屏游戲的時候可以通過設(shè)置攝像機所占據(jù)的視口空間來控制。 -
屏幕坐標(biāo):Screen Space
屏幕坐標(biāo)開始和像素扯上關(guān)系了,也就是說屏幕坐標(biāo)和分辨率有關(guān),屏幕的左下角為(0,0),但右上角為(screen.width,screen.height)。比如游戲的分辨率為500*600,則screen.width=500;screen.height=600
我們先來看一下Unity提供的相關(guān)常見函數(shù):
//1.屏幕轉(zhuǎn)世界坐標(biāo)
Vector3 Camera.main.ScreenToWorldPoint(new Vector3(screenPos.x , screenPos.y , zInfo));
//2.世界轉(zhuǎn)屏幕坐標(biāo)
Vector3 Camera.main.WorldToScreenPoint(new Vector3(worldPos.x , worldPos.y , worldPos.z));
//3.世界轉(zhuǎn)視口坐標(biāo)
Vector3 Camera.main.WorldToViewportPoint();
//4.視口轉(zhuǎn)世界坐標(biāo)
Vector3 Camera.main.ViewportToWorldPoint(new Vector3(viewPortPos.x , viewPortPos.y , zInfo));
//5.視口轉(zhuǎn)屏幕坐標(biāo)
Vector3 Camera.main.ViewportToScreenPoint();
//6.屏幕轉(zhuǎn)視口坐標(biāo)
Vector3 Camera.main.ScreenToViewportPoint();
觀察這些個函數(shù),首先一個很明顯的共同點,就是這些函數(shù)都是Camera的成員函數(shù),輸入和輸出都為Vector3類型的變量。也即這些函數(shù)都是針對當(dāng)前攝像機的一個變換操作。這很容易理解,因為3D游戲中的坐標(biāo)從模型空間到最終的屏幕空間經(jīng)過了model,view,projection,以及之后的NDC變換等,其中除model是用于從模型空間到世界空間的變換外,之后的view,projection都是基于攝像機的。他們會隨著使用相機的變化而變化。至于具體的內(nèi)容,變化過程,這里不做過多描述,可以查看網(wǎng)上的相關(guān)文章。
當(dāng)然,我們在使用這些API的時候,只需要清楚我們的輸入和輸出的內(nèi)容及其關(guān)系就好了。
接下來,我們來聊一聊這些函數(shù):
- 上一篇:UNITY3D MonoDevelop不能粘貼外部代碼文字怎 2021/2/27
- 下一篇:Unity 3d里的相機跟隨 2021/2/25


