От нескольких дней до пары часов: клонирование скина в Unity через замену GUID
В MadSword мы выпускали для издателя один match-3 движок под десятками скинов: на пике — двенадцать обновлений и два новых скина в неделю.

Два скина одного match-3 движка: Clash of Diamonds (сверху) и Curse of the Pharaoh (снизу).
Скин — это пара сотен ассетов: спрайты, материалы, префабы, сцены. Unity связывает ассеты по GUID, который лежит в .meta-файле каждого ассета, поэтому простая копия папки скина по-прежнему везде ссылалась на старый скин. Команда перешивала ссылки руками. Уходили дни, и всё равно постоянно что-то ломалось: где-то забыли поменять, переключились — а скина нет, картинки пришли не те или не туда.
Удивительнее всего было то, что проблемой это никто не считал. Люди так давно работали этим способом, что несколько дней возни казались нормальной работой.
Для решения API Unity не понадобился вовсе. Работаем напрямую с файлами:
- Копируем папку скина.
- Читаем все
.meta-файлы в копии и выдаём каждому ассету новый GUID, запоминая соответствие старый → новый. - Проходим по всем файлам копии — сценам, префабам, материалам — и заменяем каждый старый GUID на новый.
Так появился Smart Duplicate в нашем общем движке Engine: правый клик по папке скина, Ctrl+Alt+D. Сначала он переводил проект в текстовую сериализацию, чтобы любую сцену и префаб можно было править как обычный текст, а потом переписывал GUID в пятнадцати типах файлов Unity — сценах, префабах, материалах, анимациях, контроллерах, шрифтах и других.
Теперь все внутренние связи вели внутрь нового скина. Алгоритм придумал я и разжевал его программисту по шагам; скрипт он написал за день.
После этого новый скин — это пара часов, чтобы раскидать новые картинки. Тестирование упростилось, ломаться стало меньше, а команда стала выпускать быстрее.
Урок: ищите работу, которую команда перестала замечать. Самые дорогие ручные шаги — часто те, с которыми все смирились как с «так принято».