Один из наших клиентов — геймдизайнер — хотел добавить новый уровень в мобильный RPG-проект. Без кастомного инструмента это выглядит так: он открывает Unity Editor, создаёт ScriptableObject, заполняет поля вручную, не видит превью, случайно оставляет null в обязательном поле — и баг обнаруживается в QA через неделю. Такая задержка — неделя на поиск одного null — стоит проекту времени и денег. С нашим Level Editor внутри Unity: визуальный список уровней, drag-and-drop порядок, встроенная валидация, превью иконки уровня прямо в инструменте.
Разница — не просто удобство. Это скорость итерации и количество ошибок в контенте. Наш опыт показывает, что кастомные редакторы сокращают время наполнения контента на 40–60% и снижают количество багов в релизе в 5 раз.
В этой статье разберём, какие типы редакторов востребованы в геймдеве, как мы их реализуем на Unity и Unreal Engine, и какую пользу они приносят команде. Если вам нужен кастомный инструмент — свяжитесь с нами для первичного анализа.
Какие задачи решают кастомные редакторы?
Custom Editor Windows для работы с игровыми данными. Типичные кейсы: редактор квестов (дерево зависимостей, условия, награды), редактор диалогов (граф с ветками), редактор экономики (таблица с ценами, курсами валют, балансом), редактор лута (вероятности, веса, условия дропа). Всё это можно хранить в ScriptableObject или JSON — но редактировать через стандартный Inspector медленно и небезопасно. Разработка таких инструментов занимает от 3 дней до 4 недель в зависимости от сложности.
EditorWindow в Unity — базовый класс для любого инструмента. IMGUI (GUILayout, EditorGUILayout) или новый UI Toolkit (USS + UXML) — выбираем под задачу. UI Toolkit предпочтительнее для сложных интерфейсов с деревьями, списками, drag-and-drop. IMGUI быстрее для простых форм и не требует отдельных файлов разметки.
PropertyDrawer и CustomEditor — когда не нужно отдельное окно, но нужно улучшить отображение конкретного ScriptableObject или Component в Inspector. [CustomPropertyDrawer(typeof(LootTable))] с визуализацией весов в виде маленькой гистограммы прямо в Inspector — это несколько часов работы, которые экономят часы непонимания у геймдизайнера.
Как мы строили редактор диалогов для RPG — кейс из практики
Graphy-подобный редактор диалогов — самый запрашиваемый тип инструмента. Требования: узлы с текстом реплик, ветки выбора, условия (проверка флагов, прогресса), локализация. В проекте было 50+ узлов, 20 типов условий — редактор сократил время ввода диалогов в 3 раза.
Стандартный подход — на основе GraphView API (пространство имён UnityEditor.Experimental.GraphView). GraphView предоставляет pan, zoom, select, copy-paste из коробки. Кастомные Node классы наследуются от UnityEditor.Experimental.GraphView.Node, порты (Port) определяют входы и выходы.
Проблема GraphView: он помечен как Experimental с Unity 2019 и официально так и не получил стабильного статуса. Это означает возможные breaking changes при обновлении движка. Альтернатива для новых проектов — xNode (опенсорс) или собственная реализация на UI Toolkit с кастомной drag-логикой.
Данные диалогов храним в ScriptableObject с [SerializeReference] для полиморфного хранения разных типов узлов — это позволяет сериализовать наследников без обёрток и потери типов при десериализации. Если диалоги нужно редактировать вне Unity (нарративщиком без Editor) — используем JSON с кастомной сериализацией или yarn/ink форматы с парсером на стороне Unity.
Как валидация предотвращает ошибки?
Инструмент без валидации переносит ответственность за корректность данных на человека — это всегда ошибки. Три уровня защиты:
Inline validation в редакторе. [Required] аттрибут через кастомный PropertyDrawer который рисует красную рамку вокруг пустого обязательного поля. Видно сразу, до сохранения. Inline validation сокращает количество ошибок на этапе редактирования на 90%.
Pre-build validation. IPreprocessBuildWithReport.OnPreprocessBuild() — метод, который вызывается перед каждой сборкой. Обходим все ScriptableObject ассеты нужного типа через AssetDatabase.FindAssets, проверяем обязательные поля, null-ссылки, дубликаты ID. При нахождении ошибки — throw BuildFailedException с описанием что и где сломано. Билд не запускается с битыми данными.
Runtime assertions. В Debug-сборках: Debug.Assert(quest.reward != null, $"Quest {quest.id} has null reward"). Дёшево и ловит то, что прошло через первые два уровня.
Пример кода inline-валидации
```csharp [CustomPropertyDrawer(typeof(LootTable))] public class LootTableDrawer : PropertyDrawer { public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUI.BeginProperty(position, label, property); // отрисовка с валидацией EditorGUI.EndProperty(); } } ```Кастомные Gizmo и Scene View Tools
Для уровневых редакторов: кастомные Handles в Scene View через Handles.DrawWireCube, Handles.DrawBezier, HandleUtility.PickGameObject — позволяют визуализировать игровые данные прямо в сцене. Спаун-зоны, пути патрулирования, триггерные зоны — редактируемые через drag в Scene View, а не через числа в Inspector.
[DrawGizmo(GizmoType.Selected)] аттрибут рисует кастомный Gizmo без OnDrawGizmos() на компоненте — чище архитектурно.
Что входит в работу
| Этап | Результат | Примерные сроки |
|---|---|---|
| Анализ структуры данных | Спецификация редактора и схема данных | 1–2 дня |
| Прототипирование интерфейса | Mockup в UI Toolkit или Figma | 2–4 дня |
| Реализация ядра | Функционал CRUD, валидация, сериализация | 3–10 дней |
| Интеграция с проектом | Подключение к существующим системам | 1–3 дня |
| Документация и обучение | Руководство пользователя и видеосессия | 1–2 дня |
Сроки
| Инструмент | Срок |
|---|---|
| CustomEditor / PropertyDrawer для существующего типа | 1–3 дня |
| Простой EditorWindow (таблица данных + CRUD) | 3–7 дней |
| Граф-редактор (диалоги, квесты) со средней сложностью | 2–4 недели |
| Полноценный Level Editor с валидацией и gizmos | 3–8 недель |
Стоимость рассчитывается после описания функциональных требований и анализа структуры игровых данных. Инструмент окупается за 2–3 месяца за счёт сокращения ошибок контента. У нас за плечами 5+ лет опыта в геймдеве, более 30 реализованных инструментов для студий разных размеров. Оцените, как кастомный инструмент ускорит работу вашей команды. Готовы обсудить ваш редактор? Свяжитесь с нами для детальной оценки.






