01.11.2026
YAML в разработке игр: практический разбор
YAML (YAML Ain't Markup Language) — это человекочитаемый формат сериализации данных, который широко применяется в геймдеве для описания конфигураций, диалогов, уровней и баланса. В отличие от JSON, YAML опирается на отступы и допускает комментарии, что делает его удобным для геймдизайнеров и сценаристов, не знакомых с программированием.
Почему YAML удобен для игровых проектов
Разработка игр требует частой итерации над контентом: параметры оружия, характеристики врагов, ветки диалогов, настройки уровней. Хранить эти данные в коде неудобно, а JSON получается многословным. YAML решает обе проблемы.
Читаемость — структура видна по отступам, а не по скобкам.
Комментарии — можно оставлять пояснения прямо в конфиге.
Гибкость типов — поддерживаются строки, числа, булевы значения, списки и словари.
Совместимость — большинство игровых движков и языков имеют библиотеки для парсинга YAML.
Базовый синтаксис
Скаляры и словари
Простейший YAML-документ описывает пары ключ-значение. Отступы задаются пробелами, табуляция запрещена.
weapon:
name: "Меч рассвета"
damage: 42
rarity: legendary
two_handed: false
Здесь weapon — это словарь с четырьмя полями. Строки можно брать в кавычки, но при отсутствии спецсимволов они не обязательны.
Списки
Списки обозначаются дефисом. В игровых конфигурациях так удобно перечислять предметы, способности или точки спавна.
loot_table:
- id: potion_health
weight: 50
- id: sword_iron
weight: 30
- id: amulet_rare
weight: 5
Каждый элемент списка может быть как скаляром, так и полноценным словарём. Комбинируя списки и словари, можно описывать сколь угодно сложные структуры.
Применение в игровых системах
Диалоги и квесты
Сценаристы часто предпочитают YAML за возможность писать реплики без экранирования кавычек и переносов строк. Многострочный текст задаётся символом | или >.
npc_blacksmith:
greeting: |
Приветствую, странник.
Мои клинки не ржавеют.
quest:
id: forge_blade
objective: "Принеси 5 кусков руды"
reward: 200_gold
Баланс и параметры
Числовые характеристики удобно выносить в отдельные файлы, чтобы геймдизайнер мог править их без пересборки проекта. YAML поддерживает якоря и ссылки, что позволяет переиспользовать общие блоки.
base_enemy: &base
health: 100
speed: 2.5
damage: 10
goblin: