Пятница, 29 Марта 2024, 15:42

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Анимация в 2D срабатывает не сразу после нажатия клавиши
Анимация в 2D срабатывает не сразу после нажатия клавиши
8Observer8Дата: Воскресенье, 12 Июля 2015, 23:51 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
Привет,

Сделал небольшой пример, чтобы показать проблему: скачать

Проблема: анимация в 2D срабатывает не сразу после нажатия клавиши

Скрипт:


Добавлено (12 июля 2015, 23:51)
---------------------------------------------
Получается, что если двигаться вверх и вниз (W и S), то перемещение срабатывает быстрее, поэтому танк, к примеру, начинает ехать задом.

Добавил перемещение:


Сообщение отредактировал 8Observer8 - Воскресенье, 12 Июля 2015, 23:52
seamanДата: Понедельник, 13 Июля 2015, 01:32 | Сообщение # 2
старожил
Сейчас нет на сайте
Во первых у Idle как я понял как таковой анимации вообще нет, а сначала переходит именно на нее.
Во вторых анимации с "Idle" намного дольше чем без него, а у транзишн стоит галка HasExitTime.
Следовательно пока не закончится Idle - Move не запустится. А у Idle нет анимации. Поэтому кажется что анимация не запустилась.
Видимо из-за этого беда. Убери галку.

Вообще непонятно - зачем Idle "анимации"?

PS^ цвет танчика проще менять программно...
PPS: Вас не раздражает эта ошибка?


Сообщение отредактировал seaman - Понедельник, 13 Июля 2015, 01:35
8Observer8Дата: Понедельник, 13 Июля 2015, 09:50 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
seaman, огромное спасибо, что откликнулись! Давайте по порядку.

Цитата seaman ()
Во первых у Idle как я понял как таковой анимации вообще нет, а сначала переходит именно на нее.

У меня есть две анимации Idle:
- PlayerIdleUp
- PlayerIdleDown

В аниматоре PlayerIdleUp установлена поумолчанию. У меня подозрение, что здесь, что-то не так и возможно вы правы, потому что когда я запускаю игру и одновременно вытаскиваю Animator, то не вижу проигрывание (жёлтой полоски) под анимацией PlayerIdleUp в аниматоре.

И того у меня сейчас четыре анимации:
- PlayerIdleUp (стоим и смотрим вверх)
- PlayerIdleDown (смотрим вниз)
- PlayerUp (движение вверх)
- PlayerDown (движение вниз)

В аниматоре я их соединил стрелками. Создал целую переменную state. Её значения:
0: PlayerIdleUp
1: PlayerIdleDown
4: PlayerUp
5: PlayerDown

То есть в соответствии с enum:
Код
    private enum PlayerState
       {
           IdleUp, IdleDown, IdleRight, IdleLeft,
           MoveUp, MoveDown, MoveRight, MoveLeft
       }


На остальные вопросы я потом отвечу. Помогите мне сначала понять, что не так делаю сейчас.

Вы говорите:
Цитата seaman ()
Следовательно пока не закончится Idle - Move не запустится. А у Idle нет анимации.

А почему же тогда после запуска игры, нажатия кнопки W - анимация PlayerIdleUp переходит в анимацию PlayerUp? Если нажать вниз, то будет переход на анимацию движения PlayerDown, но с задержкой. Как же нет Idle если есть PlayerIdleUp?


Сообщение отредактировал 8Observer8 - Понедельник, 13 Июля 2015, 09:53
seamanДата: Понедельник, 13 Июля 2015, 10:55 | Сообщение # 4
старожил
Сейчас нет на сайте
Вообще я не ждал ответов. Что у Вас заанимации, что в аниматоре я и сам вижу.
Что такое анимация?- изменение состояния. Какое изменение в анимациях - PlayerIdleUp, PlayerIdleDown? Никакого! Там один кадр и ничего не меняется. Что это за анимация? Потому и говорю - в этих "анимациях" нет никаких анимаций.
А вот длится этот кадр - секунду. И пока не пройдет эта секунда в другое состояние танк не перейдет. Уберите галки HasExitTime у всех транзишн.
"Анимации" PlayerIdleUp, PlayerIdleDown и аналогичные имхо просто совершенно не нужны.

А лучше - смотрите мои уроки. Там как раз танчики делаем.

ЗЫ: продолжение уроков думаю будет завтра.
8Observer8Дата: Понедельник, 13 Июля 2015, 11:11 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата seaman ()
Что такое анимация?- изменение состояния. Какое изменение в анимациях - PlayerIdleUp, PlayerIdleDown?

Idle - это анимация покоя. Я не понимаю, что в этом плохого.

Цитата seaman ()
А вот длится этот кадр - секунду. И пока не пройдет эта секунда в другое состояние танк не перейдет. Уберите галки HasExitTime у всех транзишн.

Теперь я понимаю, почему переход из анимации покоя в анимацию движения срабатывает не сразу. Это в теории, но на практике я убрал все HasExitTime, но ничего не изменилось.

Добавлено (13 июля 2015, 11:10)
---------------------------------------------

Цитата seaman ()
А лучше - смотрите мои уроки. Там как раз танчики делаем.

Спасибо большое! Посмотрю. Я как раз хотел сделать клон этой игры для тренировки.

Добавлено (13 июля 2015, 11:11)
---------------------------------------------

Цитата seaman ()
PPS: Вас не раздражает эта ошибка?

У вас есть предположение почему она случается?
seamanДата: Понедельник, 13 Июля 2015, 11:38 | Сообщение # 6
старожил
Сейчас нет на сайте
Цитата
У вас есть предположение почему она случается?

Когда создавали анимации случайно нажали кнопку добавления события. Я в проекте не смог найти где это событие. Если найдете - просто удалите. Но проще - заново пересоздать все анимации.
Цитата
Я не понимаю, что в этом плохого.

Ну на самом деле ничего плохого. Только зачем такая длительность? Один кадр - он и есть один кадр...
8Observer8Дата: Понедельник, 13 Июля 2015, 11:50 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Цитата seaman ()
Ну на самом деле ничего плохого. Только зачем такая длительность? Один кадр - он и есть один кадр...

Почему же тогда после того, как я убрал HasExitTime у меня танк попрежнему начинается двигаться до того, как срабатывает анимация?

Добавлено (13 июля 2015, 11:50)
---------------------------------------------
Цитата seaman ()
Когда создавали анимации случайно нажали кнопку добавления события. Я в проекте не смог найти где это событие. Если найдете - просто удалите. Но проще - заново пересоздать все анимации.

Спасибо! Не проще заново создать анимации. События обозначаются палочками. Нужно выделить палочку и нажать Delete:


Сообщение отредактировал 8Observer8 - Понедельник, 13 Июля 2015, 11:55
seamanДата: Понедельник, 13 Июля 2015, 12:07 | Сообщение # 8
старожил
Сейчас нет на сайте
Цитата
События обозначаются палочками. Нужно выделить палочку и нажать Delete.

Знаю. Только я их у тебя почему то не нашел...
8Observer8Дата: Понедельник, 13 Июля 2015, 12:23 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Цитата seaman ()
Знаю. Только я их у тебя почему то не нашел...

Не может быть. Куда бы они делись? У меня одно событие в анимации PlayerUp. Да, случайно добавил. Посмотрите внимательно. Нужно в "Hierarchy" чтобы было выделен спрайт Player. В меню нужно выбрать "Window" -> "Animation". В списке анимаций выбрать "PlyaerUp". Напишите, пожалуйста, есть ли там палочка. Для меня это важно, чтобы знать на будущее, что может быть такой глюк.

Добавлено (13 июля 2015, 12:23)
---------------------------------------------
seaman, я посмотрел ваш урок (часть с анимацией танка). У вас нет состояний покая для танка. Как вы их собираетесь добавлять? Если есть, то покажите, пожалуйста, где.

seamanДата: Понедельник, 13 Июля 2015, 13:14 | Сообщение # 10
старожил
Сейчас нет на сайте
Цитата
Напишите, пожалуйста, есть ли там палочка.

Да, проморгал - есть.
Цитата
У вас нет состояний покая для танка. Как вы их собираетесь добавлять? Если есть, то покажите, пожалуйста, где.

Нет. Я их не думал добавлять. Скорее всего сделаю - просто обнулю speed, а когда едет speed = 1;
8Observer8Дата: Понедельник, 13 Июля 2015, 16:53 | Сообщение # 11
заслуженный участник
Сейчас нет на сайте
Цитата seaman ()
Скорее всего сделаю - просто обнулю speed, а когда едет speed = 1;

Со скоростью понятно. Но этого мало, так как танк будет буксовать на месте.

Добавлено (13 июля 2015, 14:32)
---------------------------------------------
Ура! Я нашёл ошибку! Нужно было в настройках установить для "Transition Duration" значение 0 (для каждого Transition). Причём, галочка HasExitTime должна быть действительно убрана для всех Transition.



Я нашёл решение в этом туториале: Lynda - Unity 5 2D Essential Training [FULL] (Part 1)

Добавлено (13 июля 2015, 16:53)
---------------------------------------------
Наиболее правильно привлечь "Any State":


Для каждого Transition в Settings:
- галочка "Has Exit Time" должна быть убрана
- значение "Transition Duration (s)" нужно выставить в ноль
- убрать галочку "Can Transition To Self"

Добавил постоянный звук двигателя и звук газа, при нажатии кнопок WASD (или стрелок) Tanks_v1.1.0 (проект)

P.S. Если кому-то пригодилась информация, то, пожалуйста, плюсуйте smile


Сообщение отредактировал 8Observer8 - Понедельник, 13 Июля 2015, 16:59
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Анимация в 2D срабатывает не сразу после нажатия клавиши
  • Страница 1 из 1
  • 1
Поиск:

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