ИСТРЕБИТЕЛИ БАГОВ: ПЛОХО РАБОТАЮЩАЯ ТУРЕЛЬ

В этом эпизоде есть всё: состояния турелей, повторения анимаций и предварительный взгляд на Anvil Hurricane. На этой неделе в новом выпуске «Истребителей багов» Марк Эйбент продолжает свой вечный спуск по реке под названием «Не работает».

Всем привет. Мы здесь, на моем небольшом забавном тестовом уровне Марка, и сегодня смотрим на Hurricane. У нас тут небольшой баг с турелью, поступивший от команды технического дизайна. Учтите, что она пока не завершена – мы еще работаем над ее сборкой. Когда мы заходим в эту турель, запускаются некоторые состояния анимаций. Как вы можете видеть, все это еще находится в разработке. Однако мы добрались до такого момента, когда анимация останавливается, и я полностью… ну, ломаюсь. Не очень веселая штука.

Что же здесь происходит? Мы пытаемся разделить состояния анимаций на этапы, чтобы часть из них можно было повторно использовать на других кораблях. Сейчас из-за давнего-давнего наследия у нас есть состояние входа, состояние бездействия и состояние выхода. В данном случае состояние входа – это когда турель опускается, вы садитесь, затем она поднимается. После этого вы переходите к состоянию бездействия. Недавно мы разбили анимацию на части, и теперь первым идет состояние развертывания, когда турель опускается. За ним наступает состояние входа – когда вы садитесь в кресло. После него следует сворачивание, когда вы поднимаетесь на турели вверх. Наконец, вы переходите к фазе выбора и бездействию. На текущем этапе мы успешно реализовали подъем, вход и развертывание, но как вы можете видеть, сейчас мы не добрались до развертывания – мы застряли в состоянии сворачивания. Оно бесконечно висит и никогда не завершается, так что мы никогда не переходим к фазе выбора. Вы просто поднимаетесь, после чего застреваете.

Что же здесь в действительности происходит на уровне кода? Переключимся на него. Он как бы берет игрока, берет кресло и связывает их вместе, чтобы они синхронизировали свои анимации. Конкретно в этой области кода функция ждет, пока игрок завершит свои анимации, после чего она переходит к следующему состоянию. Однако игрок непрерывно анимируется, потому что он зациклен. Код не принимает во внимание тот факт, что анимация игрока может навсегда зациклиться. Он думает: «О, кресло завершило анимацию. Теперь дождемся игрока.» Но игрок никогда не закончит анимацию, потому что он зациклен. На самом деле, когда вы находитесь в процессе сворачивания, игрок как бы ждет кресло,  чтобы подняться. Но его анимация ожидания повторяется снова и снова и никогда не завершается. В общем, нам нужно прервать его анимацию.

Итак, в эту небольшую забавную секцию обновления мы собираемся добавить проверку, зациклена ли анимация. Если да, нам, по сути, нужно будет сказать системе, что сиденье завершило анимацию, и мы тоже завершили анимацию. Всякий раз, когда мы разворачиваемся или сворачиваемся, нам нужно видеть, находится ли анимация актера в зацикленном состоянии. У кресла в параметре слота SScopeSlot хранится небольшой объем информации. Тут у нас целая группа таких слотов. Тут есть актер, приборная панель, транспортное средство и еще синхронизированный актер, потому что у нас две его реализации. В общем случае нам нужна информация о синхронизированном актере. Если мы находимся в состоянии синхронизации для актера, и у нас есть анимация для него, мы выполним проверку, относится ли эта суб-анимация к зависимому действию.

ScopeAction – это зависимое действие диапазона, которое на самом деле больше чем просто анимация. Это может быть анимация со звуком, перемещение и еще куча всяких вещей в одном действии. Мы рассматриваем его как анимацию, потому что, в принципе, это и есть анимация, но оно также может включать в себя всякие дополнительные элементы. Однако из этого действия нам в действительности нужно получить анимацию, если вас такое объяснение не слишком ввело в замешательство. Мы как бы спрашиваем: «Скажи нам, какая у тебя есть анимация?»

Получим от него контекст диапазона. Это такая штука… скажем, в Photoshop у меня есть слои. Корневой диапазон – это как корневой слой на слое верхнего уровня. То есть слой, который сейчас проигрывается. Мы хотим получить от него самую верхнюю анимацию… и технически мы здесь зацикливаемся. Добавим указатель на указатель. У нас есть анимация, которая зациклена. Затем нам, по сути, нужно задать логической переменной значение «True». И теперь, если мы находимся в фазах развертывания или сворачивания, и у игрока в этот момент проигрывается зацикленная анимация, мы, фактически, спускаемся по коду ниже и запускаем проверку условия. Текущее состояние еще не завершено, мы все еще обрабатываем код. Однако на самом деле мы уже завершили фазу и находимся в зацикленной анимации. Собственно, в этом случае мы скажем: «Всё, мы закончили», и программа перейдет к следующему состоянию. Первая строчка здесь выполнится только в том случае, если все зависимые действия завершены, и мы не зациклены. Но если мы все же зациклены, и при этом мы завершили фазу, значит мы перейдем на следующий слой. Тут очень много условий.

Пересоберем код и вернемся в игру. Как вы можете видеть, анимация завершилась. Программа выполнила анимацию выбора, и теперь актер находится в бездействии. Если я покину кресло, он проиграет все анимации. Давайте проделаем все это в замедленном вдвое режиме. Заходим в волшебную турель. Анимация запустилась, поэтому мы снизим скорость. Персонаж сцепился с креслом. Вот мы в состоянии сворачивания, когда кресло поднимается. Затем следует состояние выбора и состояние бездействия. И все, мы закончили. Очевидно, что этот код просто задает порядок состояний, чтобы переход от одного к другому выполнялся корректно. Понадобится проделать еще много работы над инверсной кинематикой и наборами анимаций входа, но здесь вы можете наблюдать, как кипит работа.

Как вы могли видеть, у нас был небольшой забавный баг с разделением анимаций. Из-за того, что анимация игрока была зациклена, он застревал во время фазы сворачивания. Пришлось дописать немного кода, чтобы выполнялось условие: если кресло завершило свою анимацию, а игрок все еще зациклен во время стадий развертывания или сворачивания, мы говорим, что всё хорошо, и можно переходить к следующей стадии. После чего персонаж сможет ухватиться за свой джойстик и заняться делом. Как вы могли видеть, у нас тут еще многое набросано в общих чертах, потому что работа над Hurricane продолжается. Однако теперь я могу отправить результаты дизайнерам, чтобы они продолжили свою работу. Надеюсь вам понравилось. До скорого.

Источник: https://star-citizen.ru

ПОХОЖИЕ СТАТЬИ

ПРЕДСТАВЛЯЕМ ANVIL ARROW

ПРЕДСТАВЛЯЕМ ANVIL ARROW

ТЕСТОВЫЕ ПОЛЕТЫ ВСЮ НЕДЕЛЮ! Arrow будет выставлен в Лорвилле на всем протяжении IAE West. Ознакомьтесь с ним в выставочном павильоне и испытайте его в полете уже сегодня! Узнать больше >> ЦЕЛЬСЯ ВЫШЕ Стрелу из лука я пустил Не знал я, где она упала; Напрасно взор...

58-Star Citizen — Русский Новостной Дайджест Стар Ситизен

58-Star Citizen - Русский Новостной Дайджест Стар Ситизен

В этом выпуске! - Главное из ATV - Обзвон разработчиков о полёте и посадке. Источник: https://vk.com/starcitizen

Путеводитель по галактике система Cano

Путеводитель по галактике система Cano

Отдельное спасибо авторам scitizen.ru за публикацию уникальной информации. В начале двадцать пятого века, вследствие первого контакта с инопланетной культурой в 2438 году, произошла быстрая колонизация Вёрджила [Virgil]. Это толкнуло цивилизацию к экспансии, которая длилась...

Оставить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.