Как сказал @Eddge, атрибут ExecuteInEditMode
- это способ сделать его возможным (см. документация для получения дополнительной информации).
Вот реализация (наивная) проверка концепции, которая блокирует x
и y
шкалы.
Редактировать : чтобы протестировать его, создайте новый компонент с этим кодом и присоедините его к объекту, который вы хотите применить. Затем установите / отмените поле 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
, поэтому она подходит для элементов пользовательского интерфейса.