

3d пазл-платформер, в котором Пикта спасает перевернутый город и его жителей с помощью пистолета-маркировщика. Выстреленные из него наклейки присваивают свойства среде, объектам и даже людям при попадании!

Привет! Меня зовут Настя. В проекте я занимаю должность Канбан-Мастера и Лид-Программиста. По менеджерской части создала пайплайн работы на модуль, следила за его выполнением, собирала метрики по нашей работе, проводила созвоны и тимбилдинги! Как Лид-Программист, я разработала универсальные системы механик и механизмов, создав все необходимое для полноценно играбельного уровня. Суммарно я потратила 65 часов на проект в этом модуле!
Мой девлог
Канбан-Мастер
Я вызвалась на эту сложную должность намеренно. Мне очень хотелось получить опыт менеджерства, ведь такого у меня никогда не было, но мне было очень важно попробовать взять на себя такую ответственность.
Пайплайн и канбан-трекер
В начале модуля было важно определить весь план работы на модуль, расписать его по спринтам (неделям), учитывая возможные блокирующие задачи, нагрузку людей по проекту и вне.
Лид каждого отдела расписал на этот модуль крупные задачи, в состав которых входит несколько подзадач — тасков. Эти задачи я и распределяла по спринтам. Я потратила 7 часов на создание итогового пайплайна, по которому мы и работали весь модуль.
Процесс разработки Пайплайна с учетом нагрузки участников.
Каждый участник проекта расписал свои таски на модуль в канбан-трекере в Miro, всего их получилось аж 218!
К каждому таску можно добавить ответственного, сложность, время, пира и описание. По времени было удобно следить за тем, чтобы никто не пересек WIP лимит работы. В формате канбана таски перетекают из бэклога в работу, затем в пир-ревью, после в менеджер-ревью, затем в готовое.
Таски в Канбан-трекере.
Еще пространства
Пространство для пирства, таблица актуальной нагрузки, спланированные и готовые таски.
Рабочие созвоны
Еженедельно я вела рабочие созвоны, к которым готовила подробный план, чтобы укладываться в рамки часа, и давать выжимку сути. Каждый созвон был записан на видео, и к нему прилагался конспект, который по очереди писали ребята.
Планы рабочих созвонов, записи созвонов, пример конспектов.
Сбор обратной связи
Я впервые заняла такую должность, поэтому раз в две недели я собирала анонимную Google форму с обратной связью по моему менеджерству. Полученное принимала к сведенью и исправляла слабые места, чем по сей день занимаюсь, ведь всегда есть что-то, что можно улучшить.
Discord сервер и тимбилдинг
Чтобы поддерживать связь с удобством, я создала наш личный сервер, на котором можно проводить как рабочие созвоны (кстати они указаны в событиях сервера), так и просто общаться.
Дискорд сервер проекта STICKERED/STUCK.
Чтобы поднять дух команде в середине модуля я провела тимбилдинг. Собрала интересные факты ребят, и мы их угадывали. Затем поиграли в другие игры, которые способствуют объединению как конкретных людей, так и команды в целом. Например: Allias, Gartic.
Лид-Программист
Наш проект создается на UnrealEngine5 с помощью BluePrint программирования. Я долго работала на версии 5.4, и STICKERED/STUCK стал первым проектом, который создавался на версии 5.6. В ней немного отличается некоторый функционал, то, чем я раньше не пользовалась, стало удобнее, и поэтому я была замотивирована изучить новое. Так я освоила таймлайны и Interface Blueprints. Из-за специфики проекта пришлось изучать то, что существовало и в прошлых версиях движка, но было мною не тронуто. Например, для этого проекта я освоила PostProcess материалы и декали.
Прицел и стрельба
Я сделала плавный переход в режим прицеливания с помощью таймлайна и виджета, и настроила трейс для стрельбы в условиях специфической камеры. Было важно сделать так, чтобы предмет под прицелом подвергался взаимодействию. Из-за особенностей камеры обычный line trace не подходил (положение прицела на экране и фактического трейса из камеры персонажа разнилось), и пришлось изобретать другую систему, за основу которой взят Sphere trace.
Маркированные объекты
В нашей игре объекты, с которыми можно взаимодействовать, называются маркированными. Степень взаимодействия разная (что-то можно переносить и менять свойства, что-то переносить нельзя, но можно менять свойства). Для легкости устройства этих объектов я сделала систему интерфейсов и тегов. Также прописала им непроходимое взаимодействие и настроила физику.
НПС

Знакомьтесь, это Эгго! Как и на маркированные объекты, на него можно клеить наклейки и переносить. А еще он может поддержать беседу благодаря массивам реплик и логики появления определённых фраз при взаимодействии с ним.


Наклейка BIG

Основная механика нашей игры — наклейки. В этом модуле решено было делать первую наклейку, которая будет увеличивать только маркированные объекты и персонажей, на которые клеится. Здесь мне на помощь пришли интерфейсы и теги, которые я создала ранее.
Таким образом мне совершенно не понадобились касты, которые нагрузили бы систему.
VFX
B этом модуле тратить много времени на идеальную обратную связь от игры — непозволительная роскошь, но есть базовые вещи, которые необходимо сделать, чтобы продукт выглядел презентабельнее: я сделала красивые, но ненавязчивые камерашейки для передвижения, прыжков и стрельбы.


Декали
Важно было сделать красивую обратную связь при увеличении маркированного объекта. По сути персонаж лепит наклейки на объект. Для этого я освоила работу с декалями с нуля. Самое классное, что таким образом наклейки лепятся на предмет именно там, где находится прицел.
Шаги
Маленькие «красивости» сильно улучшают впечатление об игре, поэтому я решила сделать ненавязчивую обратную связь от шагов, для чего я использовала специальный материал с текстурой и систему частиц Niagara. Получившуюся систему синхронизировала с анимациями (что тоже пришлось делать впервые). Получилось красивенько.
Обводка объектов
Еще для визуального выделения маркированных объектов я создала специальный PostProcess Material. Разработка далась нелегко, были варианты, от которых пришлось отказаться.


Чтобы не было перегруза, я сделала выделение видимым только с близкого расстояния:
Pick-up объектов
Нужно было сделать логику, по которой мы не можем поднимать увеличенные предметы, а также трубы даже в обычном размере, ведь они слишком тяжелы. Ряд проверок при взятии позволил настроить механику верно.
С выбрасыванием было больше проблем: пришлось совершенствовать физику предметов, чтобы они вели себя более податливо, чинить баг с бесконечным дропом одного и того же, но в итоге все работает идеально.
Механизмы

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

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

Объекты, при взаимодействии с которыми игрок погибает. В них у меня тоже получилось заложить двойную логику, чтобы не перегружать систему.
Измельчитель не только убивает, но так же как и движущаяся платформа (к примеру), может являться частью механизма.
Пропасть и игрока убивает, и становится Kill зоной для объектов, которые мы можем переносить.


Так как у нас есть пропасть, в которую могут свалиться важные для прохождения пазлов предметы, необходимо было научиться возвращать их на места. Я не только прописала для этого логику, но и дополнительно настраивала физику при респавне, чтобы объекты вели себя лучше. Более того, я смогла написать логику того, что при попытке выкинуть предмет за стену, он от нее отталкивается, а не проваливается в текстуры. Если последнее все же произойдет (чего ни разу не получилось ни у кого из плей-тестеров), объект все еще ударится об пропасть и заспавнится на своем месте.
Я также предусмотрела случай, когда игрок погибает с предметом в руках. При этом исходе предмет не дублируется, а просто остается в руках у игрока.
Аутсорс
Я обменялась задачам с девочкой Машей, Лид-Программиста проекта ARCHITECTS of SHAPE.
Ей нужна была помощь с настройкой мувемента персонажа относительно камеры. Дело в том, что они настроили весьма специфичную камеру, и под нее было необходимо отдельно настроить движение: персонаж передвигался на WASD по осям мира, а не относительно камеры. Я нашла лаконичный способ исправить это, и спустя час проб и ошибок нашлось элегантное решение, которое позволило добиться идеального результата.
В свою очередь Маша синхронизировала камеру с поворотом персонажа: для наших механик это было необходимо, чтобы геймплей ощущался приятно.
Трейлер!