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輸出鼠標點擊座標,同時輸出圓形操縱桿按鈕的座標(這裏默認爲圖片中心座標)
可以看到:
我們使用的方法正確,獲得了正確座標。