我有这个矩形转换:
它是我的悬停GUI的一部分。每次我悬停在某个东西上时,GUI都会充满信息(正因为如此,高度是动态的)并移动到我悬停的对象上。
有时GUI不在屏幕上,要将其移回视图,我需要知道当前高度。
上图是一个示例,当前高度为545.01,但我的脚本记录了一个不同的高度:
RectTransform hoverElementRect = instance.hoverGUI.GetComponent<HoverGUI_Components>().GetHoverElement().GetComponent<RectTransform>();
Debug.Log(hoverElementRect.sizeDelta); // gives (450, 842)
这怎么可能呢?
我现在没有太多的代码,我是一个新手在统一,也许有人已经有了一个想法,but here is the whole GUI postioning and creating code。
相关部分在最后。
编辑:
foreach (RectTransform rect in instance.hoverGUI.GetComponent<HoverGUI_Components>().GetHoverElement().GetComponentsInChildren<RectTransform>()) {
LayoutRebuilder.ForceRebuildLayoutImmediate(rect);
rect.ForceUpdateRectTransforms();
}
RectTransform hoverElementRect = instance.hoverGUI.GetComponent<HoverGUI_Components>().GetHoverElement().GetComponent<RectTransform>();
LayoutRebuilder.ForceRebuildLayoutImmediate(hoverElementRect);
hoverElementRect.ForceUpdateRectTransforms();
ForceUpdateRectTransforms()不会转换任何东西。我甚至在整个GUI对象中的所有rect上都使用过它。我甚至尝试在我做过的每个操作后使用它。
4条答案
按热度按时间mzmfm0qo1#
您可以使用
LayoutUtility.GetPreferredHeight(rectTransform)
修复您的特定问题。不要强制更新任何内容。这里有一个扩展方法,通常可能会有帮助。您可能需要为您的特定应用程序重新排序检查。
esyap4oy2#
在awake方法中调用的sizeDelta和在start方法中调用的sizeDelta可能会产生不同的结果。
sigwle7e3#
是的,总是使用
代替
nuypyhwy4#
我知道这个问题已经过时了,但我还是要分享我的简单解决方案:请确保您已将“using UnityEngine.UI”命名空间添加到脚本中。否则,RectTransform.sizeDelta将返回错误的值。