Способ хранения настроек своих тулов в 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 или любые другие сериализованные данные).
🧱 Пример использования
💡 Сценарии применения:
- Хранение личных настроек кастомных окон и инструментов;
- Кэши данных вроде последних выбранных путей и значений;
- Сохранение последних состояний UI-элементов редактора.
🧰 Частые использования:
- Кастомные Overlay в SceneView;
- Кастомные расширения Toolbar'а, предоставляемых пакетами типа:
- https://github.com/smkplus/CustomToolbar
- https://github.com/Alaxxxx/CustomToolbar
- https://github.com/marijnz/unity-toolbar-extender
- https://github.com/Sammmte/unity-toolbar-extender-ui-toolkit