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

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

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

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

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

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

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

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

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

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

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

logo

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

Апгрейды в Star Citizen

Апгрейды в Star Citizen

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

Squadrone 42 — полное видео геймплея, на русском

Squadrone 42 - полное видео геймплея, на русском

Полное видео геймплея Squadrone 42 на английском языке. Кому интересно есть спойлеры. Чуть позже добавлю видео к заданиям и рпмного их переработаю - https://wal24.ru/main/topic/missii-sk42-squadron-42/ https://youtu.be/BHR1aEdTA4M

Star Citizen 3.0 PTU ускоренное время

Star Citizen 3.0 PTU ускоренное время

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