1、Layout组件影响(HorizontalLayout、Vertical...等)
首先必须SetActive显示所有Layout组件下的UGUI物体,再进行立即强制重建布局
UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform)传入的是一个RectTransform组件对象,然后才去获取UGUI位置。
2、Animator动画系统影响
原因:由Animator播放的动画片段播放完后,Animator依然会使用动画片段最后一帧动画参数锁死所控制的参数,锁死意思是你无法通过任何手段去修改这个参数了,除非禁用Animator或者播放另一个不影响这参数的动画片段。
2.1 检查UGUI其身上以及其所有父物体是否有Animator控制它,若有则检查每一个Animator的每一个AnimationClip动画片段,找到控制它的动画帧,删掉这些控制它的动画帧即可,然后才去获取UGUI位置。
若不想删除动画帧,可以使用一个空物体代替它作为动画帧控制对象,它再作为空物体的子物体即可,除非动画帧控制的是UGUI物体的Image之类的,才无法使用空物体形式,例如控制position、scale、rotaion都可以利用再新增一个空物体作为控制对象去间接控制UGUI,而不要影响到UGUI的位置。
2.2 由于2.1方法过于复杂,你可以找到会控制UGUI的动画片段后,在Animator动画控制器里添加一个空动画,在播放完控制UGUI的动画片段后,连上空动画即可解除锁死动画控制参数。
2.3 最暴力做法,将全部控制它的Animator禁用,获取UGUI位置后再恢复回来。