1. 程式人生 > 實用技巧 >Unity 4大座標系 和 螢幕座標與UI座標的轉換問題

Unity 4大座標系 和 螢幕座標與UI座標的轉換問題

目錄




參考部落格:GolDHeaven

Unity中的4個座標系

世界座標系
平時根據transform.position等。 獲取到的物體位置、旋轉、縮放資訊,都是根據世界座標系獲得的。


觀察座標系
把攝像機當做原點,基於攝像機的一個座標系。


螢幕座標系
螢幕座標和解析度有關,螢幕的左下角為(0,0),右上角為(screen.width,screen.height)。比如遊戲的解析度為500*600,則screen.width=500;screen.height=600。


視口座標系
視口座標系類似於螢幕座標系,其左下角為(0,0),右上角為(1,1),我們在設計分屏遊戲的時候就可以通過設定攝像機所佔據的視口空間比例來控制。


4個座標系中常用的變換函式可以在參考部落格中檢視。

世界座標轉換為UI座標

類似於:SLG遊戲中我們點選一個世界場景中的建築,然後在建築的周圍彈出UI顯示建築的一些資訊。

把建築的世界座標轉換為螢幕座標。

//Camera.main為遊戲場景中的主攝像機。
Vector3 screenPos = Camera.main.WorldToScreenPoint(buildPos);

把螢幕座標轉換為UI的座標。
這裡介紹兩種方法。(因為之前用的都是第一種方法,沒見過第二種。然後公司專案用的是第二種,第一次看到那些程式碼的時候,搞了半天才搞懂是啥意思。。。)

1、常用的方法,簡單好用

//canvas即為UI所在的Canvas。
Vector2 uiPos = Vector2.zero;
RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,screenPos,null,out uiPos);
//img的錨點需要在螢幕中間,此時就可正確的設定其座標了。
img.rectTransform.anchoredPosition = uiPos;

2、不是很常用的方法,但也可以用

//當遊戲中Canvas的渲染模式為 Screen Space - Camera時,設定渲染Camera的攝像機為UICamera。
//用UICamera把螢幕座標轉換為UI物體的世界座標,
Vector3 uiWorldPos = UICamera.ScreenToWorldPoint(screenPos);
//然後賦值給UI的3D座標。
img.transform.position = uiWorldPos;