我正在创建自定义布局组,我想控制子对象上的RectTransform。我想在child的RectTransform上锁定一些字段,比如在使用canvas或unity的水平或垂直组时,这样就不能修改它。
我需要同样的效果。您可以在孩子的RectTransform上看到此消息:一些由horizontallayoutgroup驱动的值
c# - 如何锁定RectTransform的字段-LMLPHP
我找到了一半:
添加[ExecuteInEditMode]然后:

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

还有别的主意吗?

最佳答案

这是用DrivenRectTransformTrackerapi完成的。
doc开始:
驱动rectTransform意味着
rectTransform由该组件控制。这些驱动价值观
无法在检查器中编辑(显示为禁用)。他们
也不会在保存场景时保存,这样可以防止意外
场景文件更改。
每当组件更改受驱动的rectTransforms的值时,
应该首先调用clear方法,然后使用add方法添加
它所驱动的所有矩形变换。明确的方法也应该是
在组件的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指定要锁定的变量。
这就是执行此代码后的情况:
c# - 如何锁定RectTransform的字段-LMLPHP

09-07 01:38