Подводные камни 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 года сопротивлялся, пока купил лицензию плюс), и должен будешь платить год. Раньше не отказаться.
Лицензии (раз купил и пользуйся) уже нет. И это по мне очень неприятная финансовая модель. Стараюсь обходиться без подписок.
Итак кредитов и комуналки хватает. Ещё эти люди хотят залезть в карман на регулярной основе.