Страница 1 из 1

Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 27 фев 2013, 01:58
Strannik
Кто-нибудь нашел способ, как можно получить имя текущего состояния?
Как-то печалит вручную прописывать кучу названий в AnimatorStateInfo.IsName("") и AnimatorStateInfo.nameHash.

Может у кого есть варианты, немного упрощающие задачу?
Например, editor скрипт для генерация словаря Dictionary<int,string> из данных AnimatorController, где в качестве ключа используется nameHash.

Re: Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 27 фев 2013, 02:11
Woolf
Имя? Там вроде тег можно как-то получить, про имя не знаю.

Re: Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 27 фев 2013, 02:33
Strannik
С тегами там та же ситуация - тока хэш доступен.

Re: Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 27 фев 2013, 02:40
Woolf
хм...
На офе вот что предлагают:

Синтаксис:
Используется csharp
static int atakState = Animator.StringToHash("Base.Atak1");
 
void Start (){
    anim = GetComponent<Animator>();              
}
 
void FixedUpdate ()
{
    currentBaseState = anim.GetCurrentAnimatorStateInfo(0);
 
    if (currentBaseState.nameHash == atakState){
         Debug.Log("Do Stuff Here");
    }
}


Забавно.. Но тогда интересно, зачем же там возможность вешать разные теги на анимации? Если можно вешать, значит подразумевается, что их можно как-то читать? Мне самому интересно, у меня тоже вот стоит задача программного изменения скорости конкретной анимации. Но я её пока не решал, отложил на будущее.

Re: Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 27 фев 2013, 03:12
Strannik
видел этот пример)

Насчет тегов еще частично можно понять. Если их небольшое количество использовать (например, для стейтов сидячих анимаций один тег, для стоячих другой), то тогда еще приемлемо через IsTag("") сравнивать.
Конечно, когда тегов нужно много, то та же ситуация(

Re: Получение имени текущего стейта в Mecanim

СообщениеДобавлено: 03 мар 2013, 21:56
Strannik
Реализовал возможность получения информации по стейтам - имя, слой, тег и т.п.
сами скрипты:
https://dl.dropbox.com/s/wdrxcx1vdaj87p ... cripts.zip

сцена с примером использования:
https://dl.dropbox.com/s/g72yvq3q8gtva9 ... xample.zip
управление:
пробел - переключение анимационного слоя
стрелка вперед - бежать
enter - выполнить последовательность анимаций в группе
ЛКМ - атака


Как использовать скрипты:

1. В префаб добавить скрипт MecanimControllersInfo.

2. Выбрать префаб, затем и в инспекторе установить нужное количество AnimatorController-ов и перенести AnimatorController-ы в появившиеся поля

3. Нажать Update states data. Все сгенерированные данные отобразятся в полях Controllers Data.
Вручную изменять что-либо в Controllers Data нельзя!!! Эти поля отображаются просто для просмотра значений.

4. Как-нибудь получить в своих скриптах с аниматором ссылку на данный префаб.
Например, создать в вашем скрипте поле с типом MecanimControllersInfo и перенести туда префаб.

5. В скрипте будет доступ к массиву контроллеров, через которые можно получить нужный стейт.
Если вы сделали какие-нибудь изменения в AnimatorController, касающиеся сгенерированных данных, то надо повторить пункт 3.

6. PROFIT!