Unity - как быстро перейти к проценту анимации?

Хорошо, я посмотрел все, что связано с Unity Animator, и я знаю, что вы можете перейти к определенным кадрам и получить процент анимации с помощью https://answers.unity.com/questions/1418940/how-can-i-know-a-percent-of-animation.html и https://answers.unity.com/questions/181903/jump-to-a-specific-frame-in-an-animation.html

Однако я ничего не видел по этому поводу - как и в игре Causality (сделанной с Unity), мне нужно сделать что-то похожее на Magic leap с сайтом на свитке: https://www.magicleap.com/

У меня есть анимация, которую я создаю для своей модели в Blender, и вместо того, чтобы ее запускать, мне нужно быстро перейти вперед / перейти к определенному проценту анимации в зависимости от положения ее оси y.

Прямо сейчас я могу перетащить мою модель вверх / вниз по оси Y, и у меня есть максимум и минимум transform.position.y что модель может двигаться дальше (как тележка)

Vector3 goTo = new Vector3 (transform.position.x, (initObjPos.y+touchDiff), transform.position.z);
                if (goTo.y >= maxHeight) { //max = 0.251f in y, and min?
                    transform.position = new Vector3 (transform.position.x, maxHeight, transform.position.z);
                } else if (goTo.y <= minHeight) {
                    transform.position = new Vector3 (transform.position.x, minHeight, transform.position.z);
                } else { //lower
                    transform.position = goTo;
                }

Вот визуализация того, как мне нужно, чтобы анимация была завершена на 100%, когда y-позиция на максимуме, и на 0% на минимальной высоте, и чтобы я мог двигаться вперед и назад, когда пользователь перетаскивает:

Это вообще возможно?

1 ответ

Для каждого состояния в аниматоре есть переключатель для normalizedTime через параметр с плавающей точкой. Как следует из названия, установка его значения на 0 даст анимацию на 0% и 1 на 100%. Вы можете установить значение параметра через

animator.SetFloat ("AnimStateTime", 0.5f);

если вы хотите сгладить переход, используйте

animator.SetFloat ("AnimStateTime", 0.5f, 1, 10 * Time.deltaTime);

NormalizedTime

Другие вопросы по тегам