YAML в разработке игр: практический разбор YAML (YAML Ain't Markup Language) — это человекочитаемый формат сериализации данных, который широко применяется в геймдеве для описания конфигураций, диалогов, уровней и баланса.

YAML в разработке игр: практический разбор YAML (YAML Ain't Markup Language) — это человекочитаемый формат сериализации данных, который широко применяется в геймдеве для описания конфигураций, диалогов, уровней и баланса.

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:
  

Конструкция &base создаёт якорь, а *base — ссылку на него. Слияние << подмешивает поля базового словаря, что сокращает дублирование.

Подводные камни

  1. Отступы — невидимая ошибка. Смешение табов и пробелов ломает парсинг.
  2. Неоднозначные типы — строка no может быть прочитана как булево false, поэтому важные строки лучше брать в кавычки.
  3. Производительность — YAML медленнее бинарных форматов, поэтому крупные массивы данных (например, тайлы карты) обычно хранят иначе.
  4. Безопасность — при загрузке недоверенных файлов используйте безопасный режим парсера.

Практический пример на Python

Ниже — минимальный загрузчик игрового конфига, который читает YAML и превращает его в структуру данных для движка.

import yaml

def load_config(path: str) -> dict:
    with open(path, "r", encoding="utf-8") as f:
        data = yaml.safe_load(f)
    if not isinstance(data, dict):
        raise ValueError("Корневой элемент должен быть словарём")
    return data

config = load_config("enemies.yaml")
for enemy_id, params in config.items():
    print(enemy_id, params["health"], params["damage"])

Функция safe_load не выполняет произвольный код и подходит для игровых ресурсов, которые могут редактироваться вручную. Обработка ошибок типа ValueError защищает от неожиданной структуры файла.

Итог

YAML занимает нишу между строгим JSON и свободным текстом: он достаточно формален для машинной обработки и достаточно человечен для ручного редактирования. В разработке игр это качество особенно ценно, поскольку над контентом работают не только программисты, но и дизайнеры, сценаристы и художники. Освоив базовый синтаксис, якоря и слияния, команда получает удобный инструмент для описания игрового мира без лишних промежуточных редакторов и скриптов.