昨天修改項目,加了一個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;