Unity | localPosition與anchoredPosition3D的區別

昨天修改項目,加了一個InputField的放大功能,因爲放大要左右對稱放大,所以我把InputField的pivot由(0,1)改成了(0.5,1),效果如下圖:

 項目中InputField下有Text、Image等子物體,Image的錨點在左上角(根據項目需求設置),用戶可以拖拽Image,拖拽後要保存位置信息;

  • 當我沒加InputField的放大功能,即InputField的pivot爲(0,1)時,用戶拖拽後保存Image位置信息代碼如下:
  ImageManager._instance.picPosX[index] = (int)pic.localPosition.x;

Image效果正常,如下圖:

  •  當我加了InputField的放大功能,即InputField的pivot爲(0.5,1)時,用戶拖拽後保存Image位置信息代碼沒變,當用戶拖拽Image後,再次獲取圖片位置時,圖片位置發生了偏移,如下圖:

原因便是上面代碼的問題,打印了一下修改InputField pivot前後的localPosition.X、anchoredPosition3D.X:

  • InputField的pivot爲(0,1),與圖片錨點重合時,圖片最終位置:

Inspector面板:Pos X :161;

localPosition.X:161  

anchoredPosition3D.X:161

  • InputField的pivot爲(0.5,1),與圖片錨點不重合時,圖片最終位置:

Inspector面板:Pos X :161;

localPosition.X:-118     

anchoredPosition3D.X:161

所以,得出結論:

對於帶有RectTransform組件的物體來說,只是當父物體的pivot與自身的anchor重合時,自身的localPosition與anchoredPosition3D的值才相等。

Inspector面板中:Transform的座標顯示的是localPosition;RectTransform的座標顯示的是anchoredPosition3D。

所以,只要把代碼中localPosition改成anchoredPosition3D即可:

  ImageManager._instance.picPosX[index] = (int)pic.anchoredPosition3D.x;

 

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