Техническое погружение: как мы создавали пусковые платформы
Всем привет! В нашем втором техническом разборе мы рассмотрим философию совместной работы на примере ключевой функции Hytale — пусковых платформ (Launch Pads).

Меня зовут Анна (Anna), и я инженер в команде геймплея (Gameplay). Наша область особенно интересна, потому что идеально сочетает решение задач и творчество. Мы отвечаем за такие функции, как крафт, перемещение, интерфейс, а совсем недавно — за пусковые платформы (Launch Pads).
Как и многие творческие команды, команды Hypixel работают удалённо и состоят из людей с разным опытом. Чтобы добиваться успеха вместе, нам нужно найти способ эффективно сотрудничать. Именно поэтому культура совместной работы лежит в основе того, кто мы есть. В этой статье я с радостью поделюсь стратегиями сотрудничества и обратной связи, которые сыграли ключевую роль в разработке пусковых платформ (Launch Pads).

Зачем мы сотрудничаем?
Инженеры-программисты часто работают в своих «пузырях», решая задачи самостоятельно. Но создание игры — это творческий процесс, требующий сотрудничества с коллегами из разных направлений. Наши дизайнеры могут работать над совершенно другими аспектами игры, но без общения с ними мы бы недостаточно понимали инструменты, которые создаём.
Мы также полагаемся на художников, звукорежиссёров, специалистов по визуальным эффектам и продюсеров. Активное сотрудничество с ними даёт нам бесценное преимущество — их точку зрения. Мы, инженеры, тоже полны творческих идей, и возможность делиться ими помогает достичь главной цели — создавать контент для игроков.
Команда разработки функций
Команда геймплея (Gameplay) состоит из 3 инженеров, 2 технических дизайнеров, 2 аналитиков качества и 1 продюсера. Мы отвечаем за игровой процесс, связанный с опытом игрока в основном Hytale Capital и на островах игроков. Эта область требует ежедневной командной работы, где технический дизайн является важнейшим потребителем инженерной работы. Технические дизайнеры создают прототипы, дорабатывают небольшие функции и предоставляют обратную связь.
Мультидисциплинарная команда со встроенными ресурсами обеспечивает быстрое время отклика, ускоренные итерации и более доверительный творческий процесс. Тесная работа с другими направлениями при мозговых штурмах и создании на этапе проектирования — это самый ценный инструмент сотрудничества и лучшая профилактика багов и технического долга.
Если не привлекать специалистов за пределами инженерного направления при создании функций и принятии решений, можно быстро потерять из виду желаемое видение. Без активного взаимодействия обеих сторон мы рискуем остаться с предположениями или просто выполнять списки задач вместо того, чтобы использовать наше творческое мышление для создания лучшего опыта для игры и игроков в целом.
Ранние контакты при работе над новой функцией — это не только про ясность, но и про ответ на вопрос «Зачем?». Благодаря этому разговору мы все можем быть уверены, что работаем над одной целью: отправной точкой для итераций ради отличной функции для игры.
Пусковые платформы (Launch Pads)
По своей сути пусковые платформы (Launch Pads) — это актор (Actor) в мире с триггерным коллайдером (Trigger Collider). Когда объекты (например, игроки) пересекаются с триггером, срабатывает событие, которое применяет настраиваемый импульс к цели. Это отправляет объект — цель — в полёт по воздуху. Другими словами, он был запущен.

Базовая пусковая платформа (Launch Pad)
Создание пусковых платформ (Launch Pads)
Когда нам впервые поручили создать пусковые платформы (Launch Pads), моей первой мыслью было: «Ну, это же пусковая платформа! В большинстве игр они есть, наверное, будет так же, как везде». Несмотря на это первое впечатление, я опёрлась на наши ценности сотрудничества и поговорила с ответственным дизайнером в самом начале, чтобы понять его точку зрения.
Следующими шагами были: изучение спецификации дизайна, обсуждение на нашем еженедельном публичном совещании по дизайну, уточнения от дизайнеров и создание доски в Miro.
Эта доска включала основную физическую функциональность и API, необходимые для создания самой функции пусковых платформ (Launch Pads), а также базовые настраиваемые переменные для экспериментов дизайнеров.

Проактивная обратная связь
Эта доска и таймлайн были разосланы всем заинтересованным сторонам для сбора асинхронной обратной связи до начала разработки. Мы получили отзывы от геймдизайнеров, технических дизайнеров и творческих участников. Эта обратная связь привела к изменению того, что будет настраиваемым для технических дизайнеров, и того, как будет работать триггер для начальной разработки — изначально это был рейкаст (Raycast), но в итоге мы перешли на использование триггерных объёмов (Trigger Volumes) внутри движка.
В ключевые моменты я связывалась с людьми, предлагавшими изменения, и встречалась с ними один на один, чтобы поддерживать культуру творческого сотрудничества даже на этом раннем этапе и убедиться, что их вклад будет полностью понят. Эти участники были в курсе на каждом этапе процесса, чтобы мы по-прежнему двигались в направлении, которое им подходит.
Под капотом
Работа с серверно-авторитетным движением (Server-Authoritative Movement) — важнейшая часть разработки пусковых платформ (Launch Pads). Физический импульс должен применяться сервером, и скорость с вектором запуска рассчитываются и обрабатываются там. Клиент предсказывает и обрабатывает свою позицию через те же расчёты. Этот физический импульс известен только в момент запуска, поскольку каждая пусковая платформа (Launch Pad) может быть настроена на разное направление — или требовать вектора направления персонажа для расчёта скорости.

Базовая реализация пусковой платформы (Launch Pad) с доски Miro

Запросы на запуск: сервер и клиент

Код выполнения запроса на запуск на сервере и клиенте, включая сетевой откат (Networking Rollback).
При создании пусковых платформ (Launch Pads) мы в основном взаимодействовали с двумя другими командами, поскольку они владели областями, где нам требовалась экспертиза и согласие.
Движение и импульс принадлежат команде персонажей, камеры и управления (Characters, Camera, and Controls — CCC). Создание пусковых платформ (Launch Pads) означало тесное сотрудничество с ними для создания основы реализации, которую могли бы использовать и сервер, и клиент. Сотрудничество с ними привело к обнаружению нескольких сетевых багов, что открыло более широкое обсуждение сетевого движения, предсказания и импульсов.
Сетевая часть принадлежит команде Core Tech, которая занимается предсказанием на клиенте (Client-Side Prediction), а также владением сообщениями, отправляемыми между сервером и клиентом. Они активно используются во всей функции и потребовали поддержки инженеров из всех команд, чтобы пусковые платформы (Launch Pads) работали корректно.
Этот процесс также позволил нам дать обратную связь команде Core Tech по сетевому предсказанию движения и помог выявить баги благодаря реализации в реальной функции. Это также привело к ориентированной на игроков реализации инстансов (Instances). В то время родительские акторы (Parent Actors) размещались и требовали дублирования для изменения переменной на уровне каждого инстанса. В рамках разработки пусковых платформ (Launch Pads) у нас появился случай для исследования инстансирования акторов (Actor Instancing) и, следовательно, добавления ещё одного смежного рабочего процесса для инструментов.
Конфигурация для дизайнеров
Теперь, когда у нас была поддержана основная функциональность, нужно было дать техническим дизайнерам возможность начать использовать пусковые платформы (Launch Pads). Мы создали API с использованием скриптинга Luau, который требует отправки сообщения от клиента на сервер для запуска. Это означало, что технические дизайнеры получили доступ к скриптингу, а также к конфигурациям внутри каждого ассета (Asset) для каждого актора пусковой платформы (Launch Pad), размещённого в мире.

Исходный дизайн конфигурации
Конфигурации данных
Эти конфигурации важны, потому что позволяют техническому дизайнеру изменять базовые настройки без необходимости писать логику.
Например, легко задать любое из следующих значений:
- Направление пусковой платформы (Launch Pad)
- Использовать ли направление взгляда персонажа
- Сила запуска
- Переопределяется ли скорость персонажа
- Фильтры акторов (Actor Filters)
- Есть ли конкретная цель для запуска
Варианты этих конфигураций и их техническая реализация были созданы совместно с техническим дизайном и продолжают дорабатываться для обеспечения лучшего — и наиболее реалистичного — опыта для дизайнеров.

Вид внутриигрового редактора

Кодовая версия
Скриптовые конфигурации
Помимо возможности настраивать конкретные детали акторов, для технических дизайнеров также была создана скриптовая функциональность для манипулирования логикой при необходимости. Например, функция LaunchActor() дала техническим дизайнерам возможность использовать функциональность запуска без необходимости размещать пусковую платформу (Launch Pad).
Эта конкретная функция инструментария изначально не запрашивалась техническими дизайнерами, но после тестирования пусковых платформ (Launch Pads) была добавлена в бэклог как критически важный инструмент. Это дало дизайнерам немедленный доступ к итерациям, поскольку работает параллельно со скриптовой функцией OnTriggerOverlap(), которая использовалась в коде пусковых платформ (Launch Pads) для запуска системы, отправляющей актора в полёт. Доступность этого в скриптинге означала, что дизайнеры могли создавать игровые циклы через различные запросы и поведение запуска.

Скрипт Luau для пересечения триггера с пусковой платформой (Launch Pad)
Ранняя перспектива для скриптинга и настраиваемости заключалась не только в поддержке технических дизайнеров и творческих участников, но и в поддержке игроков, которые однажды сами будут использовать эти функции. В контексте этой функции мы глубоко продумали все способы, которыми игроки могут захотеть запускать акторов в своём мире. У нас было множество обсуждений о том, чтобы игроки могли строить и создавать в Hytale так же, как это делают сотрудники Hypixel.
Разработка, ориентированная на игроков
Пусковые платформы (Launch Pads) идеально подходили для создания возможностей сотрудничества и междисциплинарной работы, но эти возможности не всегда очевидны. Критически важно уделить время размышлениям о том, кто работает над функцией, кто будет её использовать и как — а затем поговорить с этими людьми напрямую, прежде чем написать хотя бы первую строку кода.
Эта ценность обратной связи и сотрудничества выходит за пределы сотрудников Hypixel. Пусковые платформы (Launch Pads) — это непрерывный процесс, и так будет всегда, пока геймплей растёт и развивается в Hytale. Мы с нетерпением ждём, как игроки реализуют пусковые платформы (Launch Pads) новыми и захватывающими способами, создавая собственные варианты использования. А мы, в свою очередь, продолжим использовать это сотрудничество для дальнейших итераций и создания новых инструментов, ориентированных на игроков, в Hytale.

Вид от первого лица на пусковую платформу (Launch Pad) в игре
Вам интересен такой технический контент? Мы нанимаем! Загляните на нашу страницу Careers для просмотра вакансий и советов по подаче заявок.
Поделиться
Обсуждение
Обсудите эту публикацию с другими участниками сообщества:
Похожие публикации

Обновление графики Hytale: тени, вода и новые эффекты
27 ноября 2019
Летнее обновление разработки 2022
22 июля 2022
Обзор прогресса разработки: август 2020
31 августа 2020
Новая эра Hypixel Studios: важное объявление от Simon и Noxy
16 апреля 2020
Система сущностей и компонентов в Hytale: техническое погружение
17 июня 2024
Весеннее обновление разработки 2025
28 марта 2025
Отчёт о прогрессе: 29 января 2020
29 января 2020