![image](https://habrastorage.org/getpro/habr/post_images/e36/a70/013/e36a7001388683d330e242e35f1da470.png)
Многие игры имеют схожие в себе компоненты (базовые игровые механики, интеграция с социальными сетями, алгоритмы поиска путей, GUI и т.д.), которые куда проще и дешевле адаптировать под свой проект, чем разрабатывать с нуля.
Тут нам на помощь приходит Unity Asset Store, который позволяет покупать\продавать практически все, что поможет при разработке, будь то отдельные скрипты, паки с моделями или же целые игровые проекты и стартер киты, которые могут сэкономить огромный объем труда, позволив не писать базовые вещи, которые есть почти во всех играх.
В этой статье я постараюсь рассказать о том, как опубликовать свой ассет в магазин юнити, основываясь на опыте публикаций четырех пакетов разного рода. По опыту могу сказать- в процессе публикации оказалось куда больше подводных камней, чем мы ожидали, один из ассетов отвергали раз так 10, ссылаясь на разного рода проблемы.
Далее будут описаны моменты, которых нету в официальной документации по паблишингу ассетов, на которые стоит обратить внимание:
1) При использовании Package Upload Tools собирается и помещается пакет, который загружается на сервер. Поскольку из превью страницы ассет стора вы не сможете скачать сами свой же ассет лучше всего для финальных тестов использовать именно этот пакет, который создается инструментами для загрузки в стор.
Если ваш проект использует другие пакеты (скажем, вы интегрировали NGUI для работы с юзер интерфейсом) то следует проверить, чтобы они не были включены в пакет, который вы отправляете на проверку. У нас было так, что даже при выделении папки с нашим продуктом в финальный пакет попадала папка Plugins. Наиболее простое решение- просто удалять эту папке перед загрузкой в ассет стор.
![](https://habrastorage.org/files/e91/94b/739/e9194b73903a4dfd81ef80899ce72e2f.png)
2) Вы должны проверить ваш ассет на плагиат. В особенности, если вы используете какие-либо подходы из уже находящихся в ассет сторе ассетах. К примеру, когда мы делали Complete 3D Game Template некоторые функции были взяты из другого стартер кита попроще. Чтобы избежать какого-либо плагиата мы проверили весь код через MOSS (наиболее адекватный и точный инструмент проверки на сходство двух проектов в коде. Разработан стенфордским университетом и умеет логически анализировать код, показывает одинаковые куски кода, даже если похожести завуалировали переименованием переменных, дроблением кода на функции и подобное). По сети гуляет открытый GUI клиент для сравнения исходников. Можно закинуть 2 папки- со своим кодом и с кодом ассета, на плагиат из которого нужно провериться и через минуту будет сгенерирован подробный side-by-side список пересечений.
![](https://habrastorage.org/files/645/28f/fa6/64528ffa62f0412c83409a950e267d85.png)
3) Ваш ассет должен быть протестирован на всех платформах. Как в скомпилированном виде, так и в редакторе юнити, причем, желательно, на разных версиях юнити. Многие вещи могут не работать. К примеру, в 4ой юнити были разного рода проблемы с билдом под браузер- там нельзя было использовать не переопределенные virtual функции в Coroutine- билд просто падал.
В юнити при тестировании ассета же используется последняя версия Unity3d pro, можно ориентироваться на нее. В случае, если на любой из платформ ваш проект не будет собираться- его могут отказаться публиковать, пока не пофиксите.
4) В случае, если проект содержит более пары строк кода он должен иметь документацию. Даже если у вас весь код задокументирован и есть readme, описывающий как начать работать с ассетом- зачастую вам будет необходимо сделать .pdf с описанием ваших систем и как они взаимодействуют.
Не лишним будет сделать диаграмму классов: при помощи visual studio делается и конвертируется в .pdf за пару кликов, но при этом экономит пользователям ассета уйму времени.
![](https://habrastorage.org/files/06e/1b7/f8b/06e1b7f8bc5c46d69456dd69b17daa68.png)
5) В случае, если вы в своем пакете используете другие (К примеру, для создания стартер кита мы интегрировали в ассет сразу несколько: NGUI, HOTween, Highlighting System, EasySave2, в прочем, многие из них можно отключить изменением одного дефайна) то вам следует перед публикацией удостовериться, что вы используете последние версии всех пакетов, а так же что вы указали в readme и документации их названия и ссылки на них в Asset Store. Вы не можете использовать старые версии ассетов. Так же все должно работать на последней версии юнити.
При разработке стартер кита мы руководствовались опытом разработки обычных проектов: работает- не трож, оставаясь до последнего момента на устаревших версиях всех ассетов и юнити. В последствии ушло немалое количество времени и сил, чтобы обновить все ассеты и пофиксить баги, связанные с обновлением.
6) Небольшой хак, на случай, когда ассет забраковали с пометкой о том, что нужно что то переделать: как только вы все поправили вы можете в ответ на сообщение на почту о отклонении ассета написать, что вы поправили ошибку и просите перепроверить. В таком случае вам не придется ждать долго как при первой отправке- ваш пакет протестируют в течение дня-двух.
В целом, админины в юнити крайне дружелюбны и с удовольствием опишут при запросе как именно воспроизвести ошибку, которую они нашли (в первый раз, когда мы не могли найти платформозависимую ошибку нам подробно расписали как ее получить. Во второй раз, как бы странно это ни было, мы спросили как воспроизвести ошибку и они не смогли воспроизвести ее повторно сами. В итоге мы так ничего и не поменяли и после повторного теста ассет приняли).
Greendq
Добавлю, что в UAS можно продавать даже утилиты, которые НЕ компилируются той версией Моно, что идёт в комплекте с Unity3D.