Подводные камни Unity

Подводные камни Unity

Когда начинал работать на Unity 4 удивился как легко работается на этом движке.

Почитал пару книг и посмотрел несколько видеокурсов — и уже можешь что-то своё создать.

Первое время трудно было привыкнуть к светлой теме (пришлось потом плюс покупать на год за $300).

Но разработка была быстрой.

С неправильным стилем разработки (всё public) пришлось бороться путём ([SerializeField]). Но это уже мелочи.

Когда дошёл до создания своих редакторов — очень приятно был удивлён. Легко и тот же C# без дополнительных настроек и работы с XML.

Проект хорошо собирался под Android и когда показывал друзьям и сотрудникам — всё работало замечательно.

Билд был большой (40Мб), но это терпимо. Особенно, когда хочется быстрой обратной связи.

Но как проект стал разрастаться — Unity стала регулярно вылетать. И это на 2д игрушке.

Unity Asset Store — замечательная вещь. Смог много вещей быстро получить (и многие бесплатно). Но тут тоже грабли — когда обновляешься на новую версию Unity в надежде, что баги, приводящие к вылету редактора починят некоторые из ассетов отваливаются.

И оказывается, что авторы их уже прекратили поддержку и часто — вообще ушли из магазина.

Приходится либо допиливать самому, либо отказываться от приятных функций.

Ассетов много, но доверять им можно только после продолжительной проверки.

Так у меня возникла проблема — LeanTween пользовался годами. Но один раз две недели провёл над отладкой кода.

Всё вроде замечательно — но не вижу проблемы и всё.

И пришлось нанимать фрилансера — и он за час всё сделал. Просто заменил LeanTween на DoTween и всё пошло.

У меня осталось стойкое и непонятное ощущение по поводу ассетов — можно завязнуть в проблеме, а на самом деле подлежащие библиотеки глючат (а ты им доверяешь уже).

И вроде — полезно, но уже боязно как-то новые ассеты брать. Даже эксперименты не помогут.

Пока Unity не купил Perforce и не сделал свой процесс контроля версий, приходилось работать с git. А он плохо расчитан на игры. Приходилось в github/bitbucket делать поддержку LFS (large file system), чтобы текстуры и меши помещались в контроль версий.

Сравнивать файлы Unity в diff тоже оказалось сложной задачей — много технических полей. Пришлось изучить как под капотом она работает.

Сейчас Unity открыла много исходника C# библиотек и сделала систему подключения. Работать стало легче.

Но в 2018.3 они ввели композитные ассеты и вся игра рассыпалась. Пришлось откатиться до 2018.2 LTS (хоть 3 года будут поддерживать).

Когда ты мелкий инди и должен зарабатывать себе на хлеб, на создание игры уходит много времени (1-2 часа в день растягивает разработку на годы).

И движок, за которым надо бежать, чтобы фиксить баги (и наконец возможности — с 4й на 5ю перешёл из-за асинхронной загрузки уровней, с 5 на 2017ю из-за улучшенного 2д, с 2017 на 2018 из-за улучшенного управления проектом и дальнейшего улучшения 2д)

Поэтому от Unity остались двойственные впечатления. Делать быстро (на джем за 2-3 дня делал игры — на других движках не получалось так быстро), но сопровождать и улучшать — муторно.

***

Недавно они наконец закончили свой DOTS (data oriented toolset) и Jobs (паралелльные задачи).

Но там полностью переработанная логика и надо игру переделывать под дата-ориентированность.

Ощущение было как от нового движка. Пока смотрю на это как забава для очень сложных и больших проектов.

У меня в проекте не больше 20-30 объектов за раз и мне это не нужно. Да и двумерные игры достаточно просты в обработке.

Хотел перейти на композитные ассеты как в Godot. Но оказалось, что мне придётся переделать 50 префабов заново (новая модель требует другого подхода).

Так что оставил эту затею.

Сейчас с 2019.4 бесплатно доступна тёмная тема. Но туда переходить — придётся побороться с новыми возможностями движка.

***

Надо очень внимательно относиться к управлению проектами — иначе можно потом потеряться. У Unity в отличие от GameMaker нет предустановленного шаблона размещения сущностей.

Так что лучше использовать уже устоявшуюся практику из Godot: сущности рядом с уровнем, и лишь общие в отдельную папку.

***

Все ассеты распаковываются в главную папку. И потом уходит много времени правильно расположить их в проекте.

С этим проблема ассетов ещё не заканчивается. При обновлении ассета твой код тоже может сломаться, поскольку многие библиотеки делают не студии или профессиональные разработчики.

И приходится учитывать эти риски и выделять время.

В общей сложности — борьба с движком занимает 20-30% времени.

И очень раздражает, когда подвисает в обработке или вылетает.

Из-за вылетов пришлось поставить ассет AutoSave — он выручал меня не один раз. И он бесплатный.

***

Нет графа сцен, надо либо самому городить либо ассет покупать за $50. Второе — проще, но надо учить новую библиотеку и редактор.

Вообще — со сценами твориться что-то странное. Подгрузить и выгрузить ты можешь. Но управлять их потом в дереве как две разные сущности — нет.

Недавно — визуально стали разделять, но программно — как было просто нагромождение объектов, так и осталось.

***

Нужно приобретать ассет для конфигурации сборок.

Так для андроида мне нужен один набор сцен (разное разрешение и методы управления заставляют перерабатывать сцены очень сильно), а для Windows — другой набор.

Ассет стоит $65.

В общем — если хочешь комфортно работать — бери LTS (life time support) версию и много ассетов улучшающих качество жизни.

Много бесплатных, но и платные тоже нужны, иначе много времени теряешь на рутинные задачи.

Так что Unity конструктор — и его бесплатность — мнимая. Они заставят покупать его (сам 2 года сопротивлялся, пока купил лицензию плюс), и должен будешь платить год. Раньше не отказаться.

Лицензии (раз купил и пользуйся) уже нет. И это по мне очень неприятная финансовая модель. Стараюсь обходиться без подписок.

Итак кредитов и комуналки хватает. Ещё эти люди хотят залезть в карман на регулярной основе.

5
6 комментариев