我正在创建自定义布局组,我想控制子对象上的RectTransform
。我想在child的RectTransform
上锁定一些字段,比如在使用canvas或unity的水平或垂直组时,这样就不能修改它。
我需要同样的效果。您可以在孩子的RectTransform
上看到此消息:一些由horizontallayoutgroup驱动的值
我找到了一半:
添加[ExecuteInEditMode]
然后:
public void Update()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
{
/* Todo => update child's positions here. */
}
#endif
}
还有别的主意吗?
最佳答案
这是用DrivenRectTransformTracker
api完成的。
从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
指定要锁定的变量。这就是执行此代码后的情况: