Воскресенье, 11 Апреля 2021, 01:54

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Куча переменных в аниматоре и проблемы с SetTrigger [РЕШЕНО]
Куча переменных в аниматоре и проблемы с SetTrigger [РЕШЕНО]
alexsilentДата: Вторник, 16 Мая 2017, 18:21 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Приветствую друзья. Пытаюсь разобраться с Аниматором, и возникает куча вопросов:

1) На каждое действие мне приходится вводить новую переменную Trigger (то есть чтобы можно было вызвать вообще в любой момент анимацию)
И я еще планирую ввести около 20 анимаций, неужели придется для всего этого безобразия добавлять больше переменных триггеров? Т__Т

2) Триггер конфликтует с другими триггерами, если запускаются одновременно, в пределах нескольких кадров
(то есть триггеру еще нужно время, чтоб переключиться в режим OFF)
(Почему в Юнити вместо этого безобразия не добавили переменную String?)

То есть конфликта бы не было, потому-что String имеет единственное значение, а Триггеры могут пересекаться, и в конечном итоге проигрывается не та
анимация, которая нужна. Обычно конфликт происходит, если резко начинать переходить из одного состояния в другое, например мгновенно приземляться
и подпрыгивать назад, или например замахиваться на удар, а потом вдруг получить удар от врага и тогда может так получиться, что триггер ранения вообще
не проигрывается.

3) Кто как вообще делает в анимации?
Когда в вашем персонаже много анимации, а не как на примерах юнити
, где все ясно и понятно, потому-что там всего 4-5 анимации,
где легко обойтись и без большого количества триггеров.

4) Можно ли как-то костылями все-таки прикрутить переменные типа String к Аниматору и чтобы работало также, как с другими переменными?
Я бы тогда выкинул все триггеры, и добавил только один триггер "Play" и одну переменную String "CurrentAnimation".

Можно вместо String использовать Integer, но его минус, что я запутаюсь, в номерах, придется запоминать, что для прыжка нужен номер 1, для сидения номер 9, а для распития спиртных напитков номер 23, в общем это было бы неудобно, хотя решит проблему, жаль не идеальным образом.



Сообщение отредактировал alexsilent - Вторник, 16 Мая 2017, 19:23
EchoITДата: Вторник, 16 Мая 2017, 18:35 | Сообщение # 2
старожил
Сейчас нет на сайте
Цитата
4) Можно ли как-то костылями все-таки прикрутить переменные типа String к Аниматору и чтобы работало также, как с другими переменными?
Я бы тогда выкинул все триггеры, и добавил только один триггер "Play" и одну переменную String "CurrentAnimation".

Прикинь, есть Legacy Animation для подобного. :D

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


Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Вторник, 16 Мая 2017, 18:36
alexsilentДата: Вторник, 16 Мая 2017, 18:39 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Цитата EchoIT ()

Прикинь, есть Legacy Animation для подобного

Я раньше этим и пользовался всегда)
Но нужно пару фишек нового аниматора (например поднятие руки на другом слое),
потому я на него пытаюсь перебраться, жаль что пока туго идет с этим.
VostruginДата: Вторник, 16 Мая 2017, 19:06 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Аниматор можно заставить воспроизводить любую его анимацию по имени, GetComponent<Animator>().Play("state name", layer). Этот вариант не подходит?

Добавлено (16 мая 2017, 19:06)
---------------------------------------------
И CrossFade для плавного перехода между анимациями




alexsilentДата: Вторник, 16 Мая 2017, 19:18 | Сообщение # 5
почти ветеран
Сейчас нет на сайте
Цитата EchoIT ()
Так что присоединяюсь к вопросу.

Оказывается было все просто, как в устаревшей версии аниматора юнити.
Зря вопрос создавал, но может кому пригодиться еще.

Можно сделать по красоте, если вместо:

Код
anim.SetTrigger(AnimationName);


писать, как в Legacy Animation:

Код
anim.CrossFade(AnimationName,.2);


(я надеюсь это работает плавно со слоями, вроде бы функциональность не потерялась, даже в ячейке "Idle",
Blend нормально работает , т.е. плавное смещение Из режима ожидания в режим движения и потом бега)



В общем, я убрал все стрелочки, все триггеры и поменял названия у ячеек, так, чтобы они были с тем названием, которое хочу вызвать
(упростил их, и сделал с тем же именем, которым раньше вызывалось этим триггером, теперь ячейка сама себе триггер, очень удобно)
Наконец-то я избавился от этих триггеров crazy

Добавлено (16 мая 2017, 19:18)
---------------------------------------------
Цитата Vostrugin ()
И CrossFade для плавного перехода между анимациями

как раз только что обнаружил, Спасибо)

А это, кажется работает не совсем плавно GetComponent<Animator>().Play("state name", layer), хотя я не тестировал, надо проверить,
но зачем, если CrossFade зашел на ура :3


Сообщение отредактировал alexsilent - Вторник, 16 Мая 2017, 19:20
EchoITДата: Вторник, 16 Мая 2017, 19:23 | Сообщение # 6
старожил
Сейчас нет на сайте
alexsilent, понял, буду юзать, но иногда не знаешь названия стэйта у разных аниматоров, а триггеры одни и те же.

Долгожданный анонсик: State of War

Сообщение отредактировал EchoIT - Вторник, 16 Мая 2017, 19:25
alexsilentДата: Вторник, 16 Мая 2017, 19:41 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Цитата EchoIT ()
но иногда не знаешь названия стэйта у разных аниматоров, а триггеры одни и те же.

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

То есть по сути переназвав Стейты, мы получаем, те самые конкретные триггеры, я только что у Стейта поменял название с "Jump" на "jump"
и стейт, также как и триггер перестал распознаваться, несмотря на то что внутри у стейта анимация с названием "Jump", так что независимо,
какая анимация привязана к стейту, главное название самого стейта, которое можно менять.

Добавлено (16 мая 2017, 19:41)
---------------------------------------------
Цитата EchoIT ()
но иногда не знаешь названия стэйта у разных аниматоров, а триггеры одни и те же.


И даже больше. Стейты в таком виде лучше триггеров, к примеру, если мы создадим новый аниматор, то триггеры придется вручную создавать заново,
их нельзя перенести со старого аниматора, а стейты в таком виде можно перенести в новый аниматор, просто скопировав. Короче это намного лучше триггеров)

Только что проверил, это круто) И если надо, то потом у ячеек поменять анимации, все равно быстрее, чем создавать заново триггеры и называть их.



Сообщение отредактировал alexsilent - Вторник, 16 Мая 2017, 19:43
WiteДата: Вторник, 16 Мая 2017, 21:58 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Если вам нужно просто переключать анимации используйте старую систему анимаций. Она кстати проц меньше жрет, особенно на мобилах это полезно.
Меканим содан(куплен) для удобного смешивания анимаций. К примеру бег полу присидя плавный переход в бег в шаг гуськом вам нужно только две анимации (правельные анимации) и одна переменная скорости. Если вы хотите сделать кучу разных анимаций, сделайте линейный бленд трее с одной переменной и меняйте ее.

Добавлено (16 мая 2017, 21:58)
---------------------------------------------
Вообще тут главное все сразу расплонировать.

berilДата: Среда, 17 Мая 2017, 02:05 | Сообщение # 9
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата
И даже больше. Стейты в таком виде лучше триггеров, к примеру, если мы создадим новый аниматор, то триггеры придется вручную создавать заново,
их нельзя перенести со старого аниматора, а стейты в таком виде можно перенести в новый аниматор, просто скопировав. Короче это намного лучше триггеров)


А зачем новый создавать нельзя просто старый скопировать ?

Нужна одна переменная создай один параметр float и меняй его , типа float = 1 значит бег, float = 2 значит смерть и т.д, только это еще муторней)




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Куча переменных в аниматоре и проблемы с SetTrigger [РЕШЕНО]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг