Единство Mecanim. Как сбросить анимацию перед отключением игрового объекта - PullRequest
2 голосов
/ 31 марта 2020

Unity 2019.3.7f1 .. Художник, с которым я работаю, сделал несколько анимаций для некоторых элементов пользовательского интерфейса, используя компонент Animator системы mecanim.

Я запускаю анимацию с помощью

Animator.SetTrigger("ParamaterName")

Объекты игры с анимированными компонентами, которые анимируются, могут быть отключены некоторыми из моих сценариев. Это может происходить во время воспроизведения анимации. Так что, если анимация начинает воспроизводиться, и, скажем, анимация заставила кнопку увеличиваться, то игровой объект отключается. Когда игровой объект снова включен (анимация больше не воспроизводится), он все еще большой. Есть ли способ сообщить Аниматору go обратно в нормальное состояние? Я пробовал подобные вещи в onEnable и OnDisable в сценарии на GameObject

    Animator.keepAnimatorControllerStateOnDisable = false
    Animator.Play("normalState",0,0f);
    Animator.playbackTime = 0f;
    Animator.Update(0f);

Эта вещь mecannim просто выглядит как черный ящик о том, как она работает. Я не знаком с этим, так как я всегда использовал свою собственную библиотеку для анимации вещей, которые я использовал в течение многих лет.

РЕДАКТИРОВАТЬ: Это было решение ...

private void Start()
{
    Animator.keepAnimatorControllerStateOnDisable = true;
}

private void OnDisable()
{
    Animator.Play("normalState",0,0f);
}

1 Ответ

2 голосов
/ 31 марта 2020

Убедитесь, что для keepAnimatorControllerStateOnDisable не установлено значение true. Вместо этого вам следует установить значение false, чтобы очистить текущее состояние контроллера Animator

Animator.keepAnimatorControllerStateOnDisable = false

Таким образом, когда вы отключаете объект с помощью Animator, состояния Animator и все его параметры go возвращаются к значениям по умолчанию.


Обновление

Из ваших комментариев удалось понять, что по умолчанию кнопка больше. Таким образом, на самом деле все наоборот (установите значение true, а не false).

Как вы упоминаете, напишите следующий код

private void Start()
{
    Animator.keepAnimatorControllerStateOnDisable = true;
}

private void OnDisable()
{
    Animator.Play("normalState",0,0f);
}
...