Как заводить ассеты (арт, аудио, анимации) в проект. Сверено с репозиторием 30.07.2026 — прошлая
версия описывала намерения мая: советовала Point там, где у нас Bilinear, snake_case там, где
прижился PascalCase, и настройки Unity Audio, которых нет, потому что звук ушёл в FMOD.
1. Git LFS — не настроен, и это уже стоило истории
Факт на 30.07.2026: LFS в репозитории не заведён. .gitattributes держит только
Linguist-оверрайды и правило -diff -merge для TMP-SDF-атласов; git lfs track пуст. При этом в
репозитории уже 7431 .png, а .git весит 645 МБ.
И заводить его не нужно — это замерено 30.07.2026, числа и разбор в записи
Journal - LFS Does Not Pay Here. Коротко: половина
веса .git — статичные нативные библиотеки (.a, .dll, .so) и YAML-ассеты, а им LFS не помогает
(статичный бинарник и так лежит в истории однократно, текст в LFS гнать нельзя). При этом lfs: true в
CI качал бы объекты на каждый из ~69 прогонов в месяц и выжег бы бесплатную квоту трафика примерно в
пятнадцать раз. Флаг из ci.yml снят.
Если однажды вернёмся к вопросу — варианты и их цена:
| Вариант | Что даёт | Чем платим |
|---|---|---|
| LFS только для новых файлов | история перестаёт пухнуть дальше | прошлые 645 МБ остаются в каждом клоне |
Переписать историю (git filter-repo) | репозиторий худеет по-настоящему | все клоны и форки несовместимы, ветки перевыпускать |
| Оставить как есть (текущий выбор) | ноль работы и ноль трафика | клон долгий |
Два условия на тот случай: не частично и не молча (когда часть файлов в LFS, а часть нет,
git lfs status перестаёт что-либо значить) и только вместе с кэшем Actions, иначе квота сгорит в
первый день.
Паттерны, если дойдёт до дела (и никогда не гонять через LFS .meta, .asset, .prefab,
.unity: это YAML, ему нужен нормальный diff и merge):
*.png filter=lfs diff=lfs merge=lfs -text
*.aseprite filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.bank filter=lfs diff=lfs merge=lfs -text
2. Куда класть
Assets/_Project/
├── Art/Sprites/ ← спрайты: юниты, части тела (Bone Animations), иконки, окружение
├── Art/Animations/ ← .anim и контроллеры
├── Audio/ ← служебное; сэмплы живут НЕ здесь (см. §4)
├── UI/ ← UXML/USS, шрифты, UI-спрайты
├── Prefabs/ · ScriptableObjects/ · Scenes/ · Tests/
Всё наше — только под Assets/_Project/. Остальное в Assets/ — вендор (Plugins, Shapes,
Settings, TextMesh Pro), туда не пишем.
3. Импорт спрайтов: Bilinear и мипы ВЫКЛЮЧЕНЫ
Проектный стандарт, а не вкусовщина: 2298 наших спрайтов на Bilinear против 143 на Point
(вендорные паки, которые не вращаются).
| Параметр | Значение | Почему |
|---|---|---|
| Filter Mode | Bilinear | стиль — «стилизованный пиксель-арт», нецелый скейл разрешён, а части тела вращаются: на Point кромка рвётся ступенями |
| Generate Mip Maps | Off, обязательно | мипы съедают контур — на удалении силуэт расплывается; это ловили на живом риге |
| Pixels Per Unit | по пайплайну: у экспортов частей тела 1000 (экспорт ×10 под вращение) | запас разрешения под поворот; PPU согласован с масштабом рига, «просто 100» ломает размеры |
| Compression | None для UI и иконок | артефакты видны на мелком |
| Sprite Mode | Multiple для листов, Single для частей | — |
Point оставляем там, где спрайт статичен и рисуется 1:1 — вендорные паки-плейсхолдеры.
Провенанс решения — memory pixel-rotation-supersampling и visual-style-stylized-not-pixelperfect;
размерная сетка (тиры 64/96/128) — unit-sprite-size-grid.
4. Звук: в Assets/ его нет
AudioClip’ов в проекте ноль. Звук идёт через FMOD: сэмплы и микс живут в FMOD Studio-проекте
(FMOD Project/), в Unity приезжают банки — Assets/StreamingAssets/Master.bank и
Master.strings.bank. Поэтому import-настроек Unity Audio (Load Type, Vorbis, Force To Mono) у нас
нет вовсе — они относятся к пути, которым мы не идём.
Заводка звука — не «положить файл в Assets/», а пайплайн scripts/audio (карта звука →
нормализация → сборка банков) плюс ключи {contentId}.{action} в AudioCatalog. Контур целиком —
скилл xgaida-x-nixi-audio; реестр «что звучит» — Audio Inventory
(генерируется скриптом, руками не правится).
5. Анимации
Спрайтовые клипы и контроллеры — в Art/Animations/. Скелетная анимация собирается из частей тела
(Art/Sprites/Bone Animations/) через риг из трансформов, клипы авторятся риг-API — контур в скилле
xgaida-x-nixi-animation. Тяжёлые 3D/FBX-риги не тащим: проект 2D.
6. Имена: PascalCase у файлов, domain.name у id
Прижилось не то, что обещал прошлый док. По факту:
- Файлы ассетов —
PascalCase, пробелы и уточнение в скобках допустимы:Antimage.asset,Arcanist.asset,Arm (Down).png,Body.png. Имя ассета совпадает с именем типа/сущности, поэтому читается рядом с кодом. - Строковый id контента — отдельная сущность,
domain.nameв нижнем регистре:relic.base,enemy.training_dummy. Он живёт внутри SO и в сейвах, и не обязан повторять имя файла. - Кириллицы в путях
Assets/нет и не должно быть (в вики — можно).
Правило snake_case из прошлой версии не соблюдалось ни разу за два месяца — оно снято, а не
«не выполнено».
7. Ассет — это данные, на которые ссылается SO
- Спрайт и звук не прописываются путём в коде: ссылка или id лежит в SO-определении.
- Сейвы хранят строковые id, а не ссылки на ассеты — визуал можно менять, не ломая сейвы.
- Локализация уже подключена (
com.unity.localization): текст в SO — только ключи, EN + RU, сразу. Правка таблиц — исключительно через Editor API (ручная правка YAML теряется и рвёт таблицу). - Addressables прямой загрузки по адресу у нас нет — пакет живёт только как основа Localization.
Resources/не использовать.
8. Коммит
- Ассет = два файла: сам файл и
.meta. Всегда вместе — потеря.metaрвёт GUID-ссылки во всех префабах и SO. - Папочные
.metaUnity кладёт на уровень выше новой папки (Navigation.metaрядом сNavigation/) — добавлять отдельно, иначе папка приедет без своего мета-файла. - Стейджить перечислением файлов, не каталогом: ветка общая с параллельными сессиями.
Чек-лист перед партией ассетов
- Filter Mode
Bilinear, мипы off, PPU согласован с пайплайном - Файлы в нужной подпапке
Assets/_Project/, именаPascalCase - Под контент заведено SO с id
domain.name; текст — ключи локализации - Ассет и
.metaуходят в коммит вместе (папочные.meta— не забыть) - Звук не кладётся в
Assets/— идёт через FMOD-пайплайн