Как стать автором
Поиск
Написать публикацию
Обновить
34.92

Unity *

Инструмент разработки 2D/3D-игр

Сначала показывать
Порог рейтинга
Уровень сложности

Профилирование Unity UI: кто портит мой батчинг?

Время на прочтение7 мин
Количество просмотров11K

Вы потратили бесконечное количество времени на оптимизацию Unity UI. Но для того, чтобы вызвать торможения, достаточно небольшой модификации крошечного атрибута почти невидимого элемента UI Canvas. И когда такое случается, даже профилирование Unity UI не спасёт вас от снижения FPS. Вы готовы долгому исправлению ошибок?

Именно это и произошло в моём последнем проекте...

Я упорно работал над оптимизацией нескольких панелей UI в порте нашей игры на Oculus Quest. В основном задача сводилась к снижению уровня перерисовки (overdraw) до приемлемых величин, чтобы GPU мог справляться с самым главным — реальным 3D-рендерингом.

Так я работал над оптимизацией Unity UI не меньше месяца, и со временем добился чертовски неплохого прогресса.

На каком-то этапе UI стал настолько оптимизированным, что едва влиял на тайминги GPU. Реализованные мной техники затемнения непрозрачного UI компенсировали большую часть перерисовок, вызванных наслоением UI (элементами, отрисовываемыми поверх других элементов).

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

Однако работа ещё была далека от завершения...

Когда я подключил Unity UI Profiler, моё внимание привлекла одна вещь.

Я увидел, что перегруженный ЦП тратит в каждом кадре более 1 мс на рендеринг UI. Это куча времени для платформы, которая даёт тебе бюджет в 13 мс на выполнение всей игры: физики, логики, 3D-рендеринга, ввода, VR и сетевого кода.

И ведь бывали случаи, когда UI «убивал» производительность ЦП ещё сильнее.
Читать дальше →

Невангеры: Road is changed

Время на прочтение4 мин
Количество просмотров4.6K
Всем доброго дня.

Время идёт и прототип странных гоночек, вдохновлённый классическими «Вангерами», немного подрос. Больше доступных машинок, локаций и игровых возможностей. Подробности — в статье.



Более подробно в курс дела вводит первая статья: Невангеры
Продолжение, часть третья: Невангеры: Spice must flow
Часть четвёртая: Невангеры: Feed for speed

Процедурные паттерны, которые можно использовать с тайловыми картами

Время на прочтение15 мин
Количество просмотров12K
Процедурная генерация используется для повышения вариабельности игр. Среди известных проектов можно упомянуть Minecraft, Enter the Gungeon и Descenders. В этом посте я объясню некоторые из алгоритмов, которые можно применять при работе с системой Tilemap, появившейся как 2D-функция в Unity 2017.2, и с RuleTile.

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

О чём этот пост?


Мы рассмотрим одни из самых распространённых способов создания процедурных миров, а также пару вариаций, созданных мной. Вот пример того, что вы сможете создавать после прочтения статьи. Три алгоритм работают вместе, создавая карту при помощи Tilemap и RuleTile:


В процессе генерации карты при помощи любого алгоритма мы получаем массив int, содержащий все новые данные. Можно продолжить модифицировать эти данные или отрендерить их в тайловую карту.
Читать дальше →

Система сохранения/загрузки данных

Время на прочтение2 мин
Количество просмотров9.6K
Всем привет!

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

Если интересно, добро пожаловать под кат.
Читать дальше →

Оптимизация Unity UI

Время на прочтение10 мин
Количество просмотров33K

image


В этой статье разбираются вопросы оптимизации UI-элементов проектов, сделанных в ​Unity​. На основании информации из официальной документации и личного опыта я постарался наглядно объяснить принципы работы UI-элементов. Также здесь вы найдёте практические советы, которые помогут улучшить производительность вашего проекта в том, что касается пользовательского интерфейса.

Читать дальше →

Как использовать прерывания в Unity Animator на полную

Время на прочтение5 мин
Количество просмотров26K


Вау-эффекта в играх можно достигнуть не только неожиданными механиками или плоттвистом, но и анимацией — в мобильных проектах на последнем часто делается особый акцент. Поэтому решил поделиться интересным переводом материала по Unity Animator. Внутри — про приоритетность переходов анимации и грамотное переключение между состояниями.
Читать дальше →

Создание простой кликер-игры с нуля

Время на прочтение4 мин
Количество просмотров83K
В последние несколько лет набирают большую популярность игры такого жанра, как «кликеры». Мне самому очень интересно играть в них, но не менее интересно создавать игру — кликер самому. Благодаря такому движку как Unity, создать свой шедевр не составит труда даже простому новичку. Давайте перейдем к делу.

Что нужно сделать?


  1. Подумать, почему и на что мы должны кликать?
  2. Что должно произойти, когда мы кликнем?
  3. Что должно произойти, если не кликнем?

Как ответил я на эти вопросы:

  1. Мы должны кликать в любое место на экране.
  2. При клике должен смениться объект.
  3. При игнорировании — проигрыш.

О чем будет игра?


Игроку нужно вовремя выбрать либо меч, либо щит, в зависимости от того, что будет падать сверху. То есть, падает меч — выбираем меч, падает щит — выбираем щит. При неправильном выборе игрок просто проиграет. На словах всё довольно просто, а в реализации еще проще.
Читать дальше →

Poco — UI автоматизация мобильных игр на основе Python в рамках AirTest IDE

Время на прочтение7 мин
Количество просмотров11K

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


Данная статья является финальной из серии про AirTest IDE. Первую, обзорную, работу можно найти по данной ссылке, а вторую, где рассказывается про фреймворк распознавания изображений, можно найти здесь.


Poco — фреймворк UI автоматизации игр использующий Python в рамках AirTest IDE с возможностью комбинирования функциональности с их же Image Recognition фреймворком (AirTest). Стоит упомянуть, что у AirTest IDE есть поддержка и других языков (JS,Lua,C#,Java), но дальнейшие примеры будут на Python, т.к. этот язык считается основным.


Основные элементы взаимодействия выглядят следующим образом:


image


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

Читать дальше →

Создание изометрических 2D-уровней с помощью системы Tilemap

Время на прочтение12 мин
Количество просмотров49K
image

В Unity 2018.3 появилась поддержка изометрических тайловых карт, очень напоминающая поддержку тайловых карт шестиугольников, которая была добавлена в версии 2018.2. Новые функции Tilemap позволяют быстро и эффективно создавать 2D-окружения на основе изометрических и шестиугольных сеток, которые использовались во многих классических играх, в том числе в первых частях Diablo и Fallout, Civilization, Age of Empires, и многих других.

Обе системы построены на основе уже существовавшей системы Tilemap, появившейся в Unity 2017.2, и сегодня работать с ними так же просто! Кроме того, они имеют нативную интеграцию с Editor. В дальнейших версиях Unity они могут быть перенесены в package manager.

Если вам интересно поэкспериментировать с этими системами, мы создали заранее подготовленный проект Isometric Starter Kit с анимированным персонажем и несколькими тайлсетами окружений. Скачать его можно здесь.

Модульные спрайтовые персонажи и их анимация

Время на прочтение11 мин
Количество просмотров25K
Эта запись девлога целиком посвящена моей системе анимации персонажей, она наполнена полезными советами и фрагментами кода.

За последние два месяца я создал целых 9 новых действий игрока (такие забавные вещи как блокировка щитом, уворачивание в прыжке и оружие), 17 новых носимых предметов, 3 набора брони (пластинчатый, шёлковый и кожаный) и 6 видов причёсок. Также я завершил создавать всю автоматизацию и инструменты, поэтому всё уже используется в игре. В статье я расскажу, как этого добился!


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

Краткое описание


Изначально я хотел проверить, можно ли совместить наложенные друг на друга спрайты с синхронизованными аниматорами для создания модульного персонажа с заменяемыми причёсками, снаряжением и носимыми предметами. Можно ли объединить нарисованную вручную пиксельную анимацию с по-настоящему настраиваемым персонажем.

Разумеется, такие функции активно используются в 3D- и 2D-играх с пререндеренными спрайтами или в 2D-играх со скелетной анимацией, но насколько я знаю, существует не так много игр, совмещающих созданную вручную анимацию и модульных персонажей (обычно потому, что процесс оказывается слишком монотонным).

GPU Bound. Как перенести на видеокарту все и немножко больше. Анимации

Время на прочтение11 мин
Количество просмотров10K
Когда-то давно, было огромным событием появления на GPU блока мультитекстурирования или hardware transformation & lighting (T&L). Настройка Fixed Function Pipeline была магическим шаманством. А те кто умел включать и использовать расширенные возможности конкретных чипов через D3D9 API hacks, считали себя познавшими дзен. Но время шло, появились шейдеры. Сначала, сильно лимитированные как по функционалу, так и по длине. Далее все больше возможностей, больше инструкций, больше скорость выполнения. Появился compute (CUDA, OpenCL, DirectCompute), и область применения мощностей видеокарт стала стремительно расширяться.

В этом цикле (надеюсь) статей я постараюсь расказать и показать, как «необычно» можно применить возможности современного GPU, при разработке игр, помимо графических эффектов. Первая часть будет посвящена анимационной системе. Все что описано, основано на практическом опыте, реализовано и работает в реальных игровых проектах.
Читать дальше →

Мой magnum opus от мира мобильного гейминга

Время на прочтение79 мин
Количество просмотров2.3K
Привет, Хабр! Сегодня, 26 сентября, мой день рождения, а значит для меня это отличный повод выкатить статью о сиквеле моей головоломки. Предупреждаю, что я любитель, а значит ошибок во ВСЕХ аспектах разработки будет не мало (если обнаружили напишите, я с радостью учту). В этой статье я хотел бы рассказать всё (ну или почти всё) про то, как я делал сиквел, как к этому шёл и к чему пришёл.

Как мы делали нашу маленькую Unity с нуля

Время на прочтение8 мин
Количество просмотров17K


У нашей компании есть свой игровой движок, который используется для всех разрабатываемых игр. Он предоставляет всю важную базовую функциональность: 

  • рендеринг;
  • работа с SDK;
  • работа с операционной системой;
  • с сетью и ресурсами. 

Однако в нем не хватало того, чем так ценится Unity, — удобной системы организации сцен и игровых объектов, а также редакторов к ним.

Здесь я хочу рассказать, как мы внедряли все эти удобства и к чему пришли.
Читать дальше →

Ближайшие события

Реалистичная каустика отражений

Время на прочтение8 мин
Количество просмотров16K

Большинство технических художников на каком-то этапе карьеры пытается создать правдоподобные отражения каустики. Если вы разработчик игр, то одна из основных причин чтения Twitter заключается в бесконечном потоке вдохновения, которое из него можно почерпать. Несколько дней назад Флориан Гельценлихтер (kolyaTQ в twitter) опубликовал GIF эффекта каустики, созданного в Unity при помощи шейдеров. Пост (представлен ниже) быстро набрал 1,5 тысячи лайков, что показывает искренний интерес к подобного типа контенту.


Хотя меня обычно больше привлекают более длинные и технически сложные серии статей (например, про объёмное атмосферное рассеяние света [перевод на Хабре] и инверсную кинематику [первая и вторая части перевода на Хабре]), я не смог удержаться перед искушением написать короткий и милый туториал об эффектах Флориана.

В конце этой статьи есть ссылка на скачивание пакета Unity и всех необходимых ассетов.

Путь от хирургии к геймдеву или первый опыт мобильной разработки на Unity

Время на прочтение6 мин
Количество просмотров15K

Зачем, кому и от кого


Всем привет! Меня зовут Анатолий. Я хочу рассказать историю о наших первых шагах в геймдеве, чтобы поделиться пусть и небольшим, но всё же опытом. Зачем? Потому что всего 6 месяцев назад сам искал подобные публикации, перечитывал и выписывал советы. Надеюсь, что и мой пост даст начинающим разработчикам полезную информацию, кого-то подтолкнёт к разработке, а кого-то, возможно, и наоборот. Не думаю, что разбирающиеся в теме люди найдут для себя что-то интересное, но для новичков или желающих ими стать статья определенно может стать полезной. Я расскажу весь путь от возникновения идеи, до публикации готового приложения в Google Play. В общем, поехали!

Внимание: будьте бдительны — лонгрид! Если не хотите много читать — выжимка из практических советов и ссылок в конце статьи.
Читать дальше →

Подумайте дважды, прежде чем использовать игровые движки

Время на прочтение8 мин
Количество просмотров34K
Холивар о том, нужно ли использовать для создания игр движки, начался сразу после появления первых игровых движков. Этот пост на reddit не является идеальным примером разумных контраргументов против постоянного использования движков, но я считаю, что непреодолимое желание их применения немного отдаёт фанатизмом.

Давайте рассуждать разумно


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

Уровень навыков


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

Если у вас нет ни технических навыков, ни интереса к их изучению, то вариантов и в самом деле нет — придётся работать с движком (или убедить кого-нибудь заняться технической частью за вас; удачи вам в этом!).

Есть промежуточное состояние между полным отсутствием навыков и профессиональным уровнем. В основном он находится в стране скриптовых языков: Scratch, Game Maker, Pygame, Unreal Blueprints, LOVE2D и т.д. Все они для тех, кто желает получить определённый уровень технических знаний, чтобы быстро достичь результатов.

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

Создание игры Tower Defense в Unity: сценарии и волны врагов

Время на прочтение15 мин
Количество просмотров9.4K
[Первая, вторая, третья и четвёртая части туториала]

  • Поддержка врагов малого, среднего и крупного размеров.
  • Создание игровых сценариев со множественными волнами врагов.
  • Разделение конфигурации ассетов и геймплейного состояния.
  • Запуск, пауза, победа, поражение и ускорение игры.
  • Создание бесконечно повторяющихся сценариев.

Это пятая часть серии туториалов, посвящённых созданию простой игры в жанре tower defense. В ней мы научимся создавать геймплейные сценарии, порождающие волны разнообразных врагов.

Туториал создавался в Unity 2018.4.6f1.


Становится довольно уютно.
Читать дальше →

Пиксельный Lo-fi в Unity

Время на прочтение3 мин
Количество просмотров17K
image

Визуальный стиль моей находящейся в разработке игры LAUNDRY GAME (да, это бессовестная реклама) основан на больших чётких пикселях в 3D. Я обожаю 3D в низком разрешении. Мне задавали много вопросов о том, как я это сделал, поэтому я решил написать туториал.

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

Дополнение 1: умный парень Пит Брисбёрн отправил сюда скрипт на случай, если вам не понравится трюк с «quad в небе» (этапы 4-6)!
Читать дальше →

Ограничения 16-битных игр и их воссоздание в Unity

Время на прочтение10 мин
Количество просмотров15K
image

В нашем первом туториале по ретро-играм мы показали, как настраивать инструмент 2D Pixel Perfect и как создавалась графика в эпоху 8-битных игр. В этом посте мы перенесёмся в 16-битную эру. С помощью Mega Cat Studios мы узнаем, как создавать аутентичную графику для игр в стиле Sega Genesis (Mega Drive) и Super NES при помощи параметров, графических структур и цветовых палитр Unity.

Создание аутентичной графики в стиле Genesis


В этом разделе мы рассмотрим рабочий процесс создания графики, имитирующей картинку разных консолей. Здесь будет меньше ограничений, чем в 8-битном проекте и больше свободы при работе с цветом, но всё-таки у Genesis есть пределы. Мы считаем, что будет также полезно объяснить, как работало «железо» консоли, чтобы вы могли применить эти ограничения в собственном ретро-проекте.

Палитры и субпалитры


Переход от 8-битных к 16-битным консолям благодаря усложнению оборудования предоставил разработчикам больше возможностей. Тем не менее, принципы создания качественной NES-графики всё ещё остаются в силе. Вся графика по-прежнему хранится в тайлах, например, размером 8×8, и собирается из них в большие изображения — спрайты и элементы фона. Художники по-прежнему ограничены субпалитрами с общим прозрачным цветом, но 16 бита обеспечивают бОльшую гибкость работы с палитрами. Вас скорее всего порадует то, что у 16-битных консолей не было жёстко заданной цветовой палитры, то есть по сравнению с NES количество доступных цветов сильно расширилось.
Читать дальше →

Cоздание визуальных компонентов в Unity UI. Система частиц

Время на прочтение10 мин
Количество просмотров15K
Привет! Эта статья о создании собственных визуальных компонентов в UI на примере компонента для визуализации системы частиц в Canvas’e.

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

image

Читать дальше →