如何在LayoutGroup中删除UI游戏对象的移动?

时间:2016-07-21 10:52:19

标签: c# user-interface unity3d

我希望平滑地插入UI游戏对象位置,而不是Unity的LayoutGroup类(特别是HorizontalLayoutGroup)处理的默认捕捉。 问题是我不知道在布局计算完成后LayoutGroup类用来移动UI对象的访问权限或覆盖方法或覆盖。

我一直在 UnityEngine.UI 和他们的Bitbucket存储库中搜索。如果全部失败,我将不得不创建自己的布局类,失去所有Unity的强大布局功能。

链接到Bitbucket回购:https://bitbucket.org/Unity-Technologies/ui/src/0155c39e05ca/UnityEngine.UI/UI/Core/Layout/?at=5.2

我只需要找出UnityEngine.UI命名空间中的哪个函数或属性可以用来覆盖Unity的 LayoutGroup 子定位,以便可以将其替换为lerp或补间。 / p>

1 个答案:

答案 0 :(得分:3)

如果您要求直接回答,请参阅LayoutGroup class:

中的方法
 protected void SetChildAlongAxis(RectTransform rect, int axis, float pos, float size)
    {
        if (rect == null)
            return;

        m_Tracker.Add(this, rect,
            DrivenTransformProperties.Anchors |
            DrivenTransformProperties.AnchoredPosition |
            DrivenTransformProperties.SizeDelta);

        rect.SetInsetAndSizeFromParentEdge(axis == 0 ? RectTransform.Edge.Left : RectTransform.Edge.Top, pos, size);
    }

在方法中从HorizontalOrVerticalLayoutGroup调用

protected void SetChildrenAlongAxis(int axis, bool isVertical)

<强> BUT

我建议你不要使用这段代码,因为这是所有布局(网格,水平和垂直)的基类。改变行为会影响所有派生的布局。

您可以创建自己的布局组

解决问题:

  1. 添加所需大小的空子元素,并让布局定位它(这是您实际元素的容器)。
  2. 创建您在步骤1中创建的元素的子子元素(这是您现在可以控制的实际元素,以便您可以定位它,补间它等等。)
  3. 希望有所帮助