我正在创建自定义布局组,我想控制子对象上的RectTransform
。我想在儿童RectTransform
上锁定一些字段,例如使用画布或Unity的水平或垂直组,以便无法修改。
我需要同样的效果。您可以在子项RectTransform
之上看到此消息:由HorizontalLayoutGroup驱动的某些值
我发现了一半:
然后添加[ExecuteInEditMode]
:
public void Update()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
{
/* Todo => update child's positions here. */
}
#endif
}
还有其他想法吗?
答案 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
指定要锁定的变量。
这是执行此代码后的样子: