如何锁定RectTransform的字段

时间:2018-03-05 14:36:24

标签: c# unity3d unity5

我正在创建自定义布局组,我想控制子对象上的RectTransform。我想在儿童RectTransform上锁定一些字段,例如使用画布或Unity的水平或垂直组,以便无法修改。

我需要同样的效果。您可以在子项RectTransform之上看到此消息:由Horizo​​ntalLayoutGroup驱动的某些值

enter image description here

我发现了一半:

然后添加[ExecuteInEditMode]

public void Update()
{
#if UNITY_EDITOR
    if (!Application.isPlaying)
    {
        /* Todo => update child's positions here. */
    }
#endif
}

还有其他想法吗?

1 个答案:

答案 0 :(得分:6)

这是通过DrivenRectTransformTracker API完成的。

来自doc

  

驱动RectTransform意味着驱动的值   RectTransform由该组件控制。这些驱动值   无法在检查器中编辑(它们显示为已禁用)。他们   保存场景时也不会保存,这可以防止不需要的   场景文件更改。

     

每当组件更改驱动的RectTransforms的值时,它就会   应首先调用Clear方法,然后使用Add方法添加   它正在驱动的所有RectTransforms。 Clear方法也应该是   在组件的OnDisable回调中调用。

文档中没有示例,但下面是如何使用它:

public RectTransform targetRC;
UnityEngine.Object driver;

void Start()
{
    DrivenRectTransformTracker dt = new DrivenRectTransformTracker();
    dt.Clear();

    //Object to drive the transform
    driver = this;
    dt.Add(driver, targetRC, DrivenTransformProperties.All);
}

链接到RectTransform变量的targetRC现在将被锁定,无法从编辑器中修改。它现在应该说像“某些值由另一个对象驱动”。您可以使用DrivenTransformProperties指定要锁定的变量。

这是执行此代码后的样子:

enter image description here