Hig*_*igh 7 c# unity-game-engine unity5
我正在创建自定义布局组,我想控制RectTransform子对象.我想RectTransform在使用canvas或Unity的Horizontal或Vertical组时锁定某些字段,以便无法修改它.
我需要同样的效果.您可以在子项的基础上看到此消息RectTransform:由HorizontalLayoutGroup驱动的某些值
我发现了一半:
[ExecuteInEditMode]然后添加:
public void Update()
{
#if UNITY_EDITOR
if (!Application.isPlaying)
{
/* Todo => update child's positions here. */
}
#endif
}
Run Code Online (Sandbox Code Playgroud)
还有其他想法吗?
这是通过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来指定要锁定的变量.
这是执行此代码后的样子: