Найти в Дзене
Unity и геймдев | aks2dio

Способ хранения настроек своих тулов в Unity

Оглавление

Для различных редакторных тулов внутри Unity часто требуется сохранять какие-то настройки, промежуточные состояния и выбранные опции. Где-то временно, где-то надолго, где-то чтобы данные были общими для всех в репозитории, а где-то только локально на конкретном устройстве.

Часто для этого используют ScriptableObject'ы. Но тогда нужно создавать объект в проекте, следить за его наличием, хранить где-то в файловой системе, добавлять в Git или в .gitignore (или иные варианты VCS). То же самое относится к другим сериализованным форматам данных.

Но что, если нужно сохранить какую-то мелочь, которая не должна попасть в VCS и которая нужна только на некоторое время?

Казалось бы, для этого могли бы подойти PlayerPrefs. Однако PlayerPrefs созданы для игровых данных. Если игра активно использует этот механизм, есть риск из редактора случайно нарушить целостность игровых данных.

🏷️ Определение

К счастью, для редактора есть похожая альтернатива — EditorPrefs. Это API для сохранения данных между сессиями редактора Unity. В отличие от PlayerPrefs, который работает в Runtime, EditorPrefs доступен только в редакторе.

Эти данные не попадают в билд, не синхронизируются с Git и живут только в Unity Editor конкретного пользователя.

📄 Документация

📁 Где хранятся данные (5.x — не ошибка):

  • macOS: ~/Library/Preferences/com.unity3d.UnityEditor5.x.plist
  • Windows: HKCU\Software\Unity Technologies\Unity Editor 5.x
  • Linux: ~/.local/share/unity3d/prefs

🔢 Поддерживаемые типы данных

int, float, bool, string (в строку можно записывать json или любые другие сериализованные данные).

🧱 Пример использования

```cs
// Сохраняем
EditorPrefs.SetInt("CustomTool_SceneIndex", 3);
EditorPrefs.SetBool("CustomTool_DebugMode", true);

// Загружаем с указанием значений по умолчанию
int sceneIndex = EditorPrefs.GetInt("CustomTool_SceneIndex", 0);
bool debugMode = EditorPrefs.GetBool("CustomTool_DebugMode", false);
```

💡 Сценарии применения:

  • Хранение личных настроек кастомных окон и инструментов;
  • Кэши данных вроде последних выбранных путей и значений;
  • Сохранение последних состояний UI-элементов редактора.

🧰 Частые использования:

  • Кастомные Overlay в SceneView;
  • Кастомные расширения Toolbar'а, предоставляемых пакетами типа:
GitHub - Alaxxxx/CustomToolbar: An advanced and extensible toolbar for Unity
GitHub - Sammmte/unity-toolbar-extender-ui-toolkit: Tool for control over Unity's main toolbar
GitHub - smkplus/CustomToolbar: CustomToolbar
GitHub - marijnz/unity-toolbar-extender: Extend the Unity Toolbar with your own Editor UI code.