помогите сделать плавное увеличение и уменьшение размеров кнопки программно. Я написал код, но он почему-то изменяется слишком быстро.
if (goUp)
{
VideoBtn.transform.localScale = Vector3.Lerp(VideoBtn.transform.localScale, endLocale,1f);
if (VideoBtn.transform.localScale == endLocale)
goUp = false;
}
if (!goUp)
{
VideoBtn.transform.localScale = Vector3.Lerp(VideoBtn.transform.localScale, startLocale,1f);
if (VideoBtn.transform.localScale == startLocale)
goUp = true;
}
public class ResizeObject : MonoBehaviour {
private Transform _transform;
private IEnumerator _resizeCoroutine;
private void Start () {
_transform = transform; // кешируем трансформ
Resize(2f, 5);
}
public void Resize (float time, float size) {
Resize(time, new Vector2(size, size, size));
}
public void Resize (float time, Vector3 size) {
// останавливаем ресайз если он происходит
if (_resizeCoroutine != null)
StopCoroutine(_resizeCoroutine);
// запускаем корутину ресайза
_resizeCoroutine = ResizeCoroutine(time, size);
StartCoroutine(_resizeCoroutine);
}
private IEnumerator ResizeCoroutine (float time, Vector3 target) {
float Timer = 0;
Vector3 Base = _transform.localScale;
while (Timer < time) {
_transform.localScale = Vector3.Lerp(Base, target, Timer/time);
yield return null; // задержка цикла до следующего кадра
Timer += Time.deltaTime;
}
_transform.localScale = target;
_resizeCoroutine = null;
}
}
Для не линейной интерполяции по кривой используется AnimationCurve
[SerializeField] private AnimationCurve _curve; // поле класса, настраивается в инспекторе
...
_transform.localScale = Vector3.Lerp(Base, target, _curve.Evaluate(Timer/time);
Сборка персонального компьютера от Artline: умный выбор для современных пользователей