Unity 螢幕座標轉UI座標
技術標籤:Unity
1:螢幕座標轉UI座標
首先我們來明確下三個座標概念:
世界座標:指的是Transform元件的position欄位
UI座標:指的是RectTransform元件的anchoredPosition欄位
螢幕座標:指的是螢幕空間的座標 (也可以說是相機空間的座標)。反正關於螢幕座標,大家只要知道以下2點即可
- 我們在Unity中獲取的滑鼠的座標,就是螢幕座標!
- 螢幕座標和世界座標不是一個東西,螢幕座標和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,可以在這裡瞭解下:
最後,這個方法會把螢幕點的UI座標的結果,裝到這個變數中。、
你也可以這樣理解:你給指定一個Vector2變數給這個引數,這個方法最後會把轉換好的UI座標賦值給你指定的這個變數。
返回值 - bool型別:
這個方法有一個返回值,但是我自己沒使用過這個返回值(感覺用處不大?)。
官方的說法是:這個返回值是,判斷此點是否在Rect所在的平面上。
如果在,就返回true。
總結一下就是:
提供一個螢幕座標點,再指定一個相機,再指定一個父物體。
就可以得到UI座標點!
關注我 ----------------------->你可以得到更多