Unity坐標系入門
一、坐標系的概念
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坐標系其實沒什麼好說的,只是進行了歸一化。
二、Screen坐標系和World坐標系的換算
在進行換算前,需要知道Camera相機的概念,相機又分為正交視圖(orthogonal)、透視視圖(perspective)。
一般2D遊戲採用正交視圖,3D遊戲採用透視視圖。
1、正交視圖
2、透視視圖
1、2D坐標系換算(正交視圖)
在上述示例中用到的天空背景圖的分辨率是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)。
2、3D坐標系換算(透視視圖)
3D坐標系換算相對更複雜一點,如下實例:
相機位於(0,0,-16),且視野角度為60度,帽子位於(0,6,0),且都沒有發生旋轉,那麼其在Y軸上的分辨率既可以推算出來。
同理,其在X軸上的分辨率也可以算出來。