Unity 世界座標系採用左手座標系,大拇指指向X軸(紅色),食指指向Y軸(黃色),中指向手心方向歪曲90度表示Z軸(藍色),同時Z軸也是物體前進方向,下圖表示Unity的四種座標系:
其中GUI和Screen的單位是畫素單位,什麼是畫素單位呢,這裡可以先了解一下畫素相關知識:
畫素:簡單地來說,可以理解成一個方塊,它是影象的最小單元,不能再分割,但它並沒有固定的大小。
螢幕解析度:指的是由畫素組成的點陣,比如說一臺電腦的螢幕解析度為1920*1080,那麼該電腦螢幕在橫向有1920個畫素,縱向有1080個畫素。
談及畫素和解析度,還有一個概念叫做PPI,什麼是PPI呢?
PPI:每英寸畫素數目,可以理解為螢幕畫素密度
因為畫素並沒有固定的大小,所以,PPI 越高,畫素大小越小,也就越清晰。具體的計算公式如下:
所以可以知道,在購買顯示器的時候,同是2K屏,24寸的是要比27寸的更清晰一些,因為PPI更高。
回到正題,比如我的電腦的解析度是1920*1080,那麼其X軸最大單位就是1920,Y軸最大單位就是1080。
瞭解了GUI、世界和螢幕座標系後,Viewport座標系其實沒什麼好說的,只是進行了歸一化。
在進行換算前,需要知道Camera相機的概念,相機又分為正交檢視(orthogonal)、透視檢視(perspective)。
一般2D遊戲採用正交檢視,3D遊戲採用透視檢視。
1、正交檢視
2、透視檢視
在上述範例中用到的天空背景圖的解析度是4096*2048,但是有個地方很奇怪,Unity顯示該圖解析度是2048*1024,實際是4096*2048。
如果想要背景圖填充滿整個螢幕,可以將遊戲檢視解析度設定為圖片解析度,然後還需要設定相機大小:
相機大小(size):採用世界座標系單位,為螢幕半寬。(所以相機大小為2048/2/100=10.24)
Pixels Per Unit:每多少畫素為一世界座標系單位。
這裡我們應該知道螢幕座標系的範圍是(0,0)到(4096,2048),那世界座標系範圍是什麼呢?
世界座標系的原點和範圍受到相機的影響,若相機的位置為(0,0),並且沒有發生旋轉,那麼世界座標系的原點就在螢幕正中心,其範圍是(-20.48,-10.24)到(20.48,10.24)。
3D座標系換算相對更復雜一點,如下範例:
相機位於(0,0,-16),且視野角度為60度,帽子位於(0,6,0),且都沒有發生旋轉,那麼其在Y軸上的解析度既可以推算出來。
同理,其在X軸上的解析度也可以算出來。