Получить AnimatorStateTransition.exitTime из Animator

Программирование на Юнити.

Получить AnimatorStateTransition.exitTime из Animator

Сообщение nikotin 11 фев 2018, 20:51

Здравствуйте. Нужно в скрипте обработать (или получить) AnimatorStateTransition.exitTime текущего перехода от одного AnimatorState к другому (Transition, короче нужно поймать has exit time ). Подскажите пожалуйста, как это можно сделать (не удается не чего найти в GetAnimatorTransitionInfo)?
nikotin
UNец
 
Сообщения: 41
Зарегистрирован: 01 окт 2017, 15:44

Re: Получить AnimatorStateTransition.exitTime из Animator

Сообщение samana 11 фев 2018, 21:29

Есть ещё такая фишка, как State Machine Behaviours. Это кнопочка, которая добавляет к клипу скрипт, в котором автоматически прописываются методы по наступлению событий начала, конца и других свойств этого клипа. https://docs.unity3d.com/ru/current/Man ... iours.html

Попробуйте этот способ, возможно он поможет.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Получить AnimatorStateTransition.exitTime из Animator

Сообщение seaman 11 фев 2018, 21:50

короче нужно поймать has exit time

Зачем? Может можно другим способом решить? Например прерыванием транзишн?
https://blogs.unity3d.com/ru/2016/07/13 ... rruptions/
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Получить AnimatorStateTransition.exitTime из Animator

Сообщение nikotin 12 фев 2018, 12:28

Просто мне нужно добавить к существующему AnimationClip его зеркальный кусок (который начинается не сначала, а с 5 секунды). Если в настройках импорта fbx персонажа во вкладке Animations - Root motion node установлен Root transform, то перс будет прыгать в позицию импортированной анимации на 5 секунде, чего не должно быть - в этот момент в скрипте нужно вызвать трансформацию
Синтаксис:
Используется csharp
transform.position = new Vector3(transform.position.x + shiftX, transform.position.y, transform.position.z);.

Можно вообще без transition обойтись и не связывать AnimationState в визуальном окне Animator например так
Синтаксис:
Используется csharp
   
 private Animator an;float currentTime;
    // Update is called once per frame
    void Update() {
currentTime = an.GetCurrentAnimatorStateInfo(0).normalizedTime;
if (currentTimen >= 1){ an.Play("from6to26", 0, 0.2f);
    transform.position = new Vector3(transform.position.x + shiftX, transform.position.y, transform.position.z);
            }
 

Тогда работает корректно, а если с транзишн то при переходе все равно прыгает, то есть пока идет переход от текущего состояния к следующему, an.GetCurrentAnimatorStateInfo(0).IsName("from6to26") равен текущему состоянию ("from1to26") а не следующему, следующему он станет равен после завершения перехода транзишн. Не понятно, если в свойствах состояния есть exitTime который принадлежит классу AnimatorStateTransition, то почему его нельзя получить из класса Animator? Как тогда получить в коде AnimatorStateTransition, нужно отказаться от визуального Animator и полностью все создавать (включая AnimatorController ) в скрипте?
Изображение
nikotin
UNец
 
Сообщения: 41
Зарегистрирован: 01 окт 2017, 15:44


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13