c# - 是否可以在检查器窗口中锁定或覆盖游戏对象比例属性坐标?

标签 c# unity3d unity3d-editor

我想知道是否可以在检查器窗口中锁定或覆盖缩放属性的 X 和 Y 坐标,以便更改一个坐标会立即更改另一个坐标,并且通过一个坐标进行擦洗会更改另一个坐标的值。如果是,如何实现?

最佳答案

正如@Eddge 所说,ExecuteInEditMode 属性是一种使其成为可能的方法(查看 documentation 了解更多信息)。

这是锁定 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;
  }
}

实际上有一个AspectRatioFitter组件pre-buit in Unity ,但它适用于 RectTransform,因此适用于 UI 元素。

关于c# - 是否可以在检查器窗口中锁定或覆盖游戏对象比例属性坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51042594/

相关文章:

C# WPF-如果右键单击系统任务栏上的应用程序图标,则在关闭应用程序之前询问用户

c# - Unity C# - 在一个点周围随机生成游戏对象

android - 如何链接到 GooglePlay 来评价游戏(Unity3d)?

c# - 让EditorWindow的最后一个EditorGUILayout填充剩余空间?

c# - 为嵌套的 ScriptableObjects 构建编辑器以在纸牌游戏中组合能力

unity3d - 如何在选择时突出显示时保持 handle 在场景中始终可见?

c# - 如何显示登录窗口和隐藏主窗口

c# - 找出风格问题的原因

c# - 简单 float 计算错误

algorithm - 给定非轴对齐矩形,如何在二维矩阵中找到样本子集?