如何锁定RectTransform的字段

Hig*_*igh 7 c# unity-game-engine unity5

我正在创建自定义布局组,我想控制RectTransform子对象.我想RectTransform在使用canvas或Unity的Horizo​​ntal或Vertical组时锁定某些字段,以便无法修改它.

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

在此输入图像描述

我发现了一半:

[ExecuteInEditMode]然后添加:

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

还有其他想法吗?

Pro*_*mer 9

这是通过DrivenRectTransformTrackerAPI 完成的.

来自doc:

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

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

RectTransform链接到targetRC变量现在将被锁定,不能从编辑器修改.它现在应该说"有些值是由另一个对象驱动的".您可以使用它DrivenTransformProperties来指定要锁定的变量.

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

在此输入图像描述

  • 谢谢,这非常有帮助。 (2认同)