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;
发布了162 篇原创文章 · 获赞 20 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/102822063
今日推荐