unity3d ugui中如何獲取ui控件位置?或者說如何將ugui中ui控件(組件)的座標轉化爲屏幕座標或canvas座標(大坑)?

unity3d ugui中如何獲取ui控件位置?或者說如何將ugui中ui控件(組件)的座標轉化爲屏幕座標或canvas座標(大坑)?


網上有一些轉化座標的方法,但我試了後發現都有問題,有一些方法和錨點的位置是有關的,比如錨點必須左下角,而且用他們的方法轉化後還有比例問題,導致判斷不準確。

他們是這麼做的:設kongjian是我們要獲取座標的控件,那麼

kongjian.GetComponent<RectTransform>().anchoredPosition.x 是x軸座標

kongjian.GetComponent<RectTransform>().anchoredPosition.y是y軸座標

這是個大坑,他是根據四個錨點的中心位置來計算的,你錨點位置設置不同,計算結果也不同。

還有人是這麼算的:

他們使用RectTransformUtility.ScreenPointToLocalPointInRectangle方法獲取座標

http://www.xuanyusong.com/archives/3476

太麻煩了,而且我試過也好像不對。

那麼到底怎樣獲取ui控件在屏幕的準確座標呢?

答案是:直接用WorldToScreenPoint方法

public Camera mycamera;//要轉化到的目的攝像機,通常canvas在這個攝像機下(即canvas的render mode設置爲這個攝像機)
Image kongjian;//自己要獲取屏幕座標的控件,可以是image,也可以是button等等


float x=mycamera.WorldToScreenPoint(kongjian.transform.position).x;
float y=mycamera.WorldToScreenPoint(kongjian.transform.position).y;
//x,y即爲控件在屏幕的座標camera.WorldToScreenPoint()方法返回的是一個position類型 是vector3類型,camera爲要轉化到的目標攝像機,傳入的參數爲控件的世界座標


我們點擊箭頭所指的中間位置,代碼debug輸出鼠標點擊座標,同時輸出圓形操縱桿按鈕的座標(這裏默認爲圖片中心座標)

可以看到:

我們使用的方法正確,獲得了正確座標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章