1. 程式人生 > 其它 >Unity 螢幕座標轉UI座標

Unity 螢幕座標轉UI座標

技術標籤:Unity

1:螢幕座標轉UI座標

首先我們來明確下三個座標概念:

世界座標:指的是Transform元件的position欄位

UI座標:指的是RectTransform元件的anchoredPosition欄位

螢幕座標:指的是螢幕空間的座標 (也可以說是相機空間的座標)。反正關於螢幕座標,大家只要知道以下2點即可

  1. 我們在Unity中獲取的滑鼠的座標,就是螢幕座標!
  2. 螢幕座標和世界座標不是一個東西,螢幕座標和UI座標不是一個東西!

Unity官方提供了一個方法,讓我們可以很簡單的把螢幕座標 轉換成UI座標!

這個方法就是:

RectTransformUtility.ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint); 

但是,我一直沒太搞懂這個方法,網上又查詢不到相關的資料。

官方文件感覺根本沒描述清楚,只有自己慢慢嘗試。

以下是自己對官方文件的翻譯,以及自己嘗試之後對官方文件的一些理解。

理解之後,這個方法還是非常好用噠!

(很可能有錯誤的地方,希望大家指出呢!文章開頭有排版好的PDF檔案,歡迎觀看+下載噠!)

引數詳解

RectTransformUtility.ScreenPointToLocalPointInRectangle(
RectTransform rect,
Vector2 screenPoint,
Camera cam,
out Vector2 localPoint);

引數 rect:

這個引數需要你提供一個父物體的RectTransform。因為這個方法是取得UI座標,而UI座標都是區域性座標,所以一定需要一個父物體,才能計算出區域性座標。(有父物體才有區域性座標對吧!)

最後,這個方法就會把螢幕上的點轉化為這個父物體下的區域性座標。

引數screenPoint:

這個引數需要你提供一個螢幕空間 的座標 (螢幕座標)。

最後,這個方法會把這個螢幕座標 轉化為ui座標。

引數 cam:

這個引數需要你指定一個相機。

因為UI座標是根據相機來確定的。(如果Canvas是Screen Space-overlay模式,cam引數應為null)

引數 localPoint:

這個引數需要你提供一個裝"返回值"的容器給方法。(如果不能理解高階引數out,可以在這裡瞭解下:

https://www.cnblogs.com/linfenghp/p/6618580.html)

最後,這個方法會把螢幕點的UI座標的結果,裝到這個變數中。、

你也可以這樣理解:你給指定一個Vector2變數給這個引數,這個方法最後會把轉換好的UI座標賦值給你指定的這個變數。

返回值 - bool型別:

這個方法有一個返回值,但是我自己沒使用過這個返回值(感覺用處不大?)。

官方的說法是:這個返回值是,判斷此點是否在Rect所在的平面上。

如果在,就返回true。

總結一下就是:

提供一個螢幕座標點,再指定一個相機,再指定一個父物體。

就可以得到UI座標點!

關注我 ----------------------->你可以得到更多