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