3

我想知道是否可以在检查器窗口中锁定或覆盖 scale 属性的 X 和 Y 坐标,以便更改一个坐标立即更改另一个坐标并擦洗一个坐标会更改另一个坐标的值。如果是,怎么做?

4

1 回答 1

1

正如@Eddge 所说,该ExecuteInEditMode属性是使其成为可能的一种方式(有关更多信息,请查看文档)。

这是一个锁定xy扩展的概念验证(简单)实现。

编辑:要对其进行测试,请使用此代码创建一个新组件,并将其附加到您要应用的对象上。然后,设置/取消设置字段isLocked以控制行为。

using UnityEngine;

[ExecuteInEditMode]
public class AspectRatioLock : MonoBehaviour
{
  public bool isLocked;
  Vector3 prevScale;

  void Start()
  {
    prevScale = transform.localScale;
  }

  void Update()
  {
    var scale = transform.localScale;
    if (isLocked && scale.x != prevScale.x)
      transform.localScale = new Vector3(scale.x, scale.y * scale.x / prevScale.x, scale.z);
    else if (isLocked && scale.y != prevScale.y)
      transform.localScale = new Vector3(scale.x * scale.y / prevScale.y, scale.y, scale.z);
    prevScale = transform.localScale;
  }
}

其实 Unity 中有一个AspectRatioFitter组件预建,但它适用于RectTransform,所以它适用于 UI 元素。

于 2018-06-26T21:15:31.637 回答