Рубрика развивается при поддержке

To Use or Not To Use: ассеты при разработке на Unity

Готовые решения, которые мы взяли на вооружение или обошли стороной при разработке Swag and Sorcery — 2D-игры в стиле пиксель-арт.

В закладки
Аудио

Небольшая и очень молодая команда разработчиков неизбежно сталкивается с кучей проблем на начальном этапе: какие выбрать инструменты для конкретных задач, насколько они будут эффективны, стоят ли они своих денег? Этот этап не миновал и Uroboros Games. Набив не одну шишку за два года работы над игрой, мы решили поделиться с вами опытом. В данной статье мы расскажем, какие ассеты мы использовали в разработке, чем они нам понравились, а в чём разочаровали.

Animation Importer

Скачать ассет (бесплатно)

Как ни удивительно, Animation Importer — это ассет для импорта анимаций из Aseprite (приложения для создания 2D-анимации, спрайтов и любого другого типа графики для игр). Сам собирает спрайты в один атлас, нарезает их, собирает анимации, создаёт контроллер — или же может создать и заполнить оверрайд-контроллер на основе заданного контроллера.

Плюсы:

  • Есть разные паттерны для генерации имён, настройка спрайтов (pixel per unit, Pivot);
  • Открытый исходный код позволяет настроить перечисленные опции под себя или же дописать новые.

Минусы:

  • Импорт только из Aseprite или PyxelEdit;
  • Доступен только в виде репозитория на Github.

Master Audio

Использование и настройка звуков. Плейлисты, ducking, триггер звуковых эффектов и куча дополнительных полезных настроек, работает из коробки. По прошествии времени трудно даже вспомнить, есть ли у этого ассета открытый исходный код, потому что потребности что-то менять вне эдитора не возникало.

Плюсы:

  • Работает из коробки;
  • Встроенная рандомизация звуков: громкость, питч, задержка или даже альтернативные варианты звука;
  • Возможность прослушать результат прямо в эдиторе;
  • Разные способы загрузки звуков: как через прямое указание ссылки, так и динамически в рантайме по указанному пути.

Минусы:

  • При большом количестве используемых аудиофайлов эдитор начинает тормозить.

Дополнительные настройки звуков выглядят так:

Bugsplat

Скачать ассет (бесплатно; есть платные тарифы)

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

Плюсы:

  • Встроенная кастомизируемая форма для отправки данных о краше;
  • Фильтры по ошибке, версии игры, IP-адресу;
  • Возможность писать комментарии к полученным отчётам об ошибках.

Минусы:

  • В логе содержится только стек вызовов, полноценный лог Unity недоступен.

Google Sheets For Unity 2.0

Позволяет загружать данные из Google-таблиц и обратно. Мы хранили в таблицах балансные значения вроде параметров монстров, персонажей, выпадения ресурсов с локаций. У такого подхода есть свои достоинства и недостатки.

Плюсы:

  • Для работы с балансом нужен только браузер;
  • Возможность менять балансные значения и заново загружать их, не пересобирая билды;
  • Возможность хранить альтернативные варианты баланса в отдельных таблицах и переключаться между ними.

Минусы:

  • Проблематично поддерживать целостность ссылок внутри таблицы;
  • Любая автоматизация внутри таблицы требует написания кода на Google Apps Script.

Editor Console Pro

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

Плюсы:

  • Возможность поиска по логу, фильтрация логов;
  • Поддержка регулярных выражений в поиске/фильтре;
  • В стектрейсе отображаются ближайшие фрагменты кода.

Минусы:

  • Не нашли.

Steamworks.NET

Скачать ассет (бесплатно)

Нативные C++ заголовки/исходники несовместимы с Unity, так что нужно использовать библиотеку-обёртку, позволяющую интегрировать функции SDK. Этой обёрткой и является Steamworks.NET.

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

Плюсы:

  • Работает из коробки;
  • Не требует сложной настройки;
  • Простое взаимодействие.

Минусы:

  • При подключении к эдитору оверлей Steam иногда начинал всплывать поверх Visual Studio, из-за чего пришлось его отключить в эдиторе.

FlowCanvas

Визуальное программирование. Ассет использовался при сборке катсцен. Открытый исходный код, нативная возможность добавлять собственные ноды — в общем, мы остались довольны (насколько можно быть довольным длительным и рутинным процессом сборки сцены на несколько минут).

Плюсы:

  • Довольно просто создаются ноды с нужным поведением;
  • В ноды можно передавать как префабы, так и объекты со сцены или же внутренние переменные;
  • Программирование нужно только при написании собственных нод, дальше достаточно только наличия логики и здравого смысла.

Минусы:

  • Будьте готовы отдать за это 70 долларов.

NGUI: Next-Gen UI

UI и всё, что к нему относится. Основывается не на uGUI (нативный UI Unity), а на своей собственной реализации кнопок, спрайтов, лейблов и т.д. С точки зрения кода работать с ним довольно приятно, есть ряд фичей специально для пиксель-арта — в том числе настройка камеры для pixel-perfect интерфейса. Довольно живое комьюнити, так что на большую часть возникших вопросов быстро находились готовые ответы.

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

Плюсы:

  • Помимо стандартных кнопок и слайдеров есть встроенная реализация сетки элементов;
  • Поддержка пиксель-арта;
  • Готовая база для реализации Drag-and-drop.

Минусы:

  • Основывается не на uGUI;
  • Стоимость.

Ассеты, с которыми нам оказалось не по пути

Без обид, это просто картинка!

AVPro Video

Около года назад у нас появилась необходимость добавить в игру видео. На тот момент встроенный плеер Unity ещё дорабатывали, и его использование на мобильных платформах не рекомендовалось. Тогда мы и наткнулись на AVPro Video, который обещал работать на всех возможных платформах. Так что мы вооружились триальной версией этого ассета, в которой из заявленных ограничений был только вотермарк поверх видео.

После первого запуска видео в билде на телефоне в воздухе повис вопрос: то ли сани не едут, то ли мы их не вывозим. Картинка по какой-то загадочной причине сильно уходила в красный, что нас, естественно, не устраивало. Проведя немало времени за копанием в настройках, мы так и не обнаружили источник проблемы (быть может, плохо искали), так что было принято решение на свой страх и риск использовать дефолтный плеер Unity. Который, ко всеобщей радости, работал как положено и трудностей не вызывал.

Со встроенным плеером Unity была связана одна-единственная проблема за всё время работы: однажды нам пришёл репорт о том, что у игрока стабильно крашится игра после одного из первых квестов. Как оказалось, причиной было отсутствие на его устройстве Media Feature Pack for Windows — который как раз включает в себя медиаплеер.

Rainbow Folders

Скачать ассет (недоступен)

Вы когда-нибудь задумывались о выделении часто используемых папок проекта? Мы вот задумались, но толковых юзкейсов придумать не смогли. Быть может, это получится у вас?

Оказалось, что на момент написания статьи Rainbow Folders больше не поддерживается и считается устаревшим. Так что для актуального перекрашивания папок вам нужно будет купить его обновлённую версию — Rainbow Folders 2.

Ruler 2D: Align, Guides & Grid Extension

Ассет для измерения расстояния между двумя точками. Планировалось использовать его для упрощения сборки окон интерфейсов, но в нём отсутствовала возможность просто выбрать два объекта и посмотреть расстояние между ними. Вместо этого нужно было вручную указать две точки на сцене (есть опция округления до целочисленных координат, что лишь немного облегчает задачу). Итог: нужно вручную зумить сцену на краю одного окна, искать, где оно заканчивается, кликнуть так, чтобы курсор "прилип" к нужному пикселю, отдалить камеру обратно и найти второе окно, после чего повторить операцию для второй точки.

Мы ценим своё душевное равновесие, поэтому обходимся математикой — и ручным подсчётом нужных координат.

A* Pathfinding Project Pro

Как следует из названия — поиск путей. Довольно сложный технически, подходит как для 2D, так и для 3D, с приятным редактором и инструментами для составления карт проходимости. Как раз из-за своей сложности был излишним для нашей задачи. К тому же, при движении только по тайлам в четырёх направлениях эвристический алгоритм почему-то вместо прямого пути вёл юнитов "лесенкой":

Но здесь сделаем оговорку: мы могли что-то упустить, или же с тех пор (а прошло около двух лет) это могли исправить.

В итоге использовался самописный поиск путей, а карту проходимости рисовали в тайл-эдиторе, что сейчас, с кастомными кистями и настройкой тайлов, сделать будет ещё проще. Но если нам понадобится комплексное решение, например, для обхода динамических препятствий, то мы воспользуемся A* Pathfinding Project Pro.

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

А какими ассетами пользуетесь вы? Поделитесь в комментариях!

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Дарья Чернышова", "author_type": "self", "tags": [], "comments": 26, "likes": 71, "favorites": 189, "is_advertisement": false, "subsite_label": "gamedev", "id": 66139, "is_wide": false, "is_ugc": true, "date": "Mon, 26 Aug 2019 17:36:08 +0300", "is_special": false }
0
{ "id": 66139, "author_id": 162102, "diff_limit": 1000, "urls": {"diff":"\/comments\/66139\/get","add":"\/comments\/66139\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/66139"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
26 комментариев
Популярные
По порядку
Написать комментарий...
8

За многие наводки спасибо, посмотрю. А вот NGUI на самом деле лютое зло, которое изобрели во времена когда у Юнити не было вменяемой UI системы. Сейчас же при обновлении Юнити до последних версий NGUI начинает ломаться и вести себя неадекватно.

Ответить
0

В свое время необходимая вещь была...

Ответить
0

неа, я просто написал кликабельные 3д кнопки и привязывал их к камере, работало на ура. Иногда привязывал и к игровым объектам, например к лифту или телеку. Использовал несколько лет пока не пришлось работать с новым UI так как этого требовал работодатель.

Конечно большой плюс это скролинги которых у меня не было, но считаю что могли бы просто сделать ассет префабов из стандартных объектов, а не городить новые классы. Видно же что канвас это еще одна камера которая рендерит только UI слой и т д, но нет мля.

Ответить
3

Не понял про лесенку. Лесенкой ведь и должно быть. Он хочет всегда быть максимально близко к цели, нет?

Ответить
0

"Он хочет всегда быть максимально близко к цели, нет" - это уже зависит от алгоритма.
В любом случае, когда персонаж идёт сначала в одном направлении, а потом один раз поворачивает и доходит до цели выглядит естественнее и аккуратнее, чем постоянная смена направлений.

Ответить
0

A* про оптимальность по расстоянию, а не по аккуратности

Ответить
0

Во-первых, длина пути в обоих случаях одинакова. Во-вторых, насколько я знаю, игры должны всё-таки ещё и выглядеть хорошо.

Ответить
0

Только А* считается итеративно, и на момент первого перехода вправо получается выгоднее идти вниз, а не вправо. Если нужно красиво — нужно приложить усилия и дописать надстройку над А*.

Ответить
0

Ну, по сути, путь получается таким "дискретным", потому что шагом может быть только одно из четырех направлений. Делать соседней нодой ещё и диагональную – и путь будет по диагонали ровно.
Алгоритм А* это алгоритм Дейкстры + эвристика (чаще всего расстояние до цели). Эвристика позволяет реально ближайшим нодам быть выбранными. А без эвристики он посчитает путь в обход одним углом (теоретически, на этой фотке оба пути равны, но выбирается первый из соседей, который прошел проверку, а не ближайший)
Короче не суть. Суть в том, что скорее всего за такое бабло, там все любым образом можно настроить. Просто очень часто людям жалко время почитать документацию поглубже.

Конечно же, имхо, могу говорить полную хню

Ответить
3

При обновлении ещё на какую-нибудь 2017-ую версию слетел тулбар с префабами, вплоть до текущей актуальной версии больше ничего странного не замечал.
Но в общем соглашусь, сейчас уже его полезность сомнительна. Особенно учитывая, что юнити свой uGUI развивают, а NGUI отпочковался в свою собственную систему.
Upd: Чёрт, промахнулся, это должно было быть ответом на сообщение выше.

Ответить
3

A* Pathfinding

сложный технически

Эээээээ

Ответить
0

Сложный не по работе с ним, а по внутренней реализации. Там и RVO для перемещения одновременно многих агентов и 3д с возможностью поиска путей в многоуровневых локациях, так что вполне себе сложное или другими словами комплексное решение.

Ответить
2

В A* Pathfinding Project можно использовать RaycastModifier и он уберет лесенку.

Ответить
0

Спасибо, проверю. В будущем пригодится)

Ответить
2

Покупка реализаций алгоритмов, покупка визуального программирования.
Каеф. Сразу видно серьезный подход.
Плагина на кнопочку "Сделать крутотень" не хватает.

Ответить
1

Насчет "AVPro Video" странно. Очень много работал с этим плагином, он единственный вывозит 4k - 8k под мобильный VR и в принципе очень крутой.

А за "Animation Importer" спасибо давно искал тулзу для экспорта из "Aseprite".

Ответить
0

На счёт AVPro Video не знаю точно в чём было дело: может быть два года назад он на ios криво работал, может триальная версия была странной, может мы что-то не так настроили (что странно, ведь мы просто видео запустили).
Но вполне допускаю, что он сейчас действительно может быть топовым решением для своих задач.

Ответить
1

Пользуясь случаем очень хочу спросить: как вышло что Swag and Sorcery такая невообразимо унылая? Неужели на стресс тестах этого не было видно?

Graveyard Keeper шикарная игра, я прям ждал Swag после неё, надеялся, что под надзором ленивых медведей будет пристойно.

Ответить
1

Rainbow Folders утащил, у нас проект здоровый и сложный, визуально выделять структуру пригодится, спасибо)

Ответить
1

FlowCanvas правда лучший из всех систем визуального программирования в сторе: Bolt притормаживает и более бедный по функционалу, Playmaker - это вообще редактор конечных автоматов, а не полноценная система виз программирования.
У того же автора есть NodeCanvas - там Behaviour Trees/конечные автоматы/деревья диалогов в одном пакете - тоже отличные.

Ответить
0

А какими ассетами пользуетесь вы? Поделитесь в комментариях!

Узнали? Согласны?

Ответить
0

А почему не устроило по навигации новая навигация от Unity (она конечно формально в бете, но вполне стабильна и с динамическими препятствиями там проблем нет).

Ответить
1

Нужна была привязка к тайлам. Плюс в Юнити пасфайндинг на физике вроде и с 2д плохо стыковался. Да и по итогу своё решение получилось достаточно простым, так что мы бы готовый поиск путей дольше под себя перестраивали.

Ответить
1

Понятно. Я к тому что есть "понадобится комплексное решение, например, для обхода динамических препятствий" можно не только на A* Pathfinding Project Pro смотреть, но и на новую родную навигацию, которую неплохо допилили. https://github.com/Unity-Technologies/NavMeshComponents

Ответить
0

Посмотрю на досуге, что с ней сделали, но с тех пор, как ковырялся с кастомными кистями для тайлмэпов, не особо доверяю ранним версиям)
Мало того, что стиль реализации разный был, так ещё и пришлось их править, чтобы они стали совместимыми.
Но следить за подобными штуками, конечно, определённо стоит.

Ответить
0

Ну да, но это не ранняя версия - они ее почти 2 года ковыряют, не знаю почему до сих пор не заменили ею старую навигацию.

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]