Как стать автором
Обновить
2
0
Руслан Хужин @ramilsson

Пользователь

Отправить сообщение

Большой город для мобильных устройств на Unity. Опыт разработки и оптимизации

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


Привет Хабр! В этой публикации хочу поделиться опытом разработки массивной мобильной игры, с большим городом и трафиком. Примеры и приемы описанные в публикации не претендуют называться эталонными и идеальными. Я не являюсь дипломированным специалистом и не призываю повторять свой опыт. Целью работы над игрой было — получение интересного опыта, получение оптимизированной игры с открытым миром. При разработке я старался максимально упрощать код. К сожалению, я не использовал ECS, а грешил с singleton.

Игра


Игра на тематику мафии. В игре я попытался воссоздать Америку 30-40. По сути игра является экономической стратегий от первого лица. Игрок захватывает бизнес и старается удержать его на плаву.
Реализовано: автомобильный трафик (светофоры, избегание столкновений), human трафик, бар, казино, клуб, квартира игрока, покупка костюма, смена костюма, покупка/покраска/заправка автомобиля, копы, охрана/гангстеры, экономика, продажа/покупка ресурсов.

Архитектура


image

Я жалею, что не использовал ECS, а пытался в велосипед. В итоге получилось все громоздко и слишком зависимо. У приложения одна точка входа — игровой объект application(go), на котором висит одноименный класс Application. Он отвечает за предварительную загрузку БД, заполнение пулов и первичные настройки. Кроме того, на плечи application(go) ложатся и несколько других singleton классов-компонентов-менеджеров.
Читать дальше →
Всего голосов 30: ↑28 и ↓2+26
Комментарии30

Шейдерный эффект дудла

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

Последние несколько лет этот стиль становится всё более популярным и активно используется в таких играх, как GoNNER и Baba is You.


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

На создание этого туториала меня вдохновил успех Doodle Studio 95!.
Всего голосов 24: ↑23 и ↓1+22
Комментарии5

Unity: бесконечный процедурно генерируемый город, получаемый при помощи алгоритма WFC (коллапс волновой функции)

Время на прочтение7 мин
Количество просмотров26K
Привет, Хабр!

Как законодатели мод по теме Unity на российском рынке предлагаем вам почитать интересное исследование о практическом использовании алгоритма WFC (Wave Function Collapse), построенного по образу и подобию известного принципа квантовой механики и очень удобного при процедурной генерации уровней в играх. Ранее на Хабре уже публиковался подробный рассказ об этом алгоритме. Автор сегодняшней статьи Мариан Кляйнеберг рассматривает алгоритм в контексте трехмерной графики и генерации бесконечного города. Приятного чтения!

Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии22

Упрощаем рисование Enum Flags в Unity

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


В этой публикации я постараюсь вкратце рассказать о типе перечисления в C#, применении его в качестве флагов, а так же о том, как можно упростить их рисование в инспекторе Unity.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+11
Комментарии5

Создание крюка-кошки в Unity. Часть 1

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

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

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

  • Создавать систему прицеливания.
  • Использовать рендер линии и distance joint для создания верёвки.
  • Научим верёвку оборачиваться вокруг игровых объектов.
  • Вычислять угол качания на верёвке и добавлять силу в этом направлении.

Примечание: этот туториал предназначен для продвинутых и опытных пользователей, и в нём не рассматриваются такие темы, как добавление компонентов, создание новых скриптов GameObject и синтаксис C#. Если вам нужно повысить навыки владения Unity, то изучите наши туториалы Getting Started with Unity и Introduction to Unity Scripting. Так как в этом туториале используется DistanceJoint2D, то стоит также просмотреть Physics Joints in Unity 2D, и уже потом вернуться к этому туториалу.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии2

7 практических уроков по UX

Время на прочтение9 мин
Количество просмотров9.7K
Эта статья будет представлять собой анализ нескольких уроков по UX/UI, которые мы получили, внимательно наблюдая на выставке за парой сотен людей, занимавшихся плейтестингом ранней сборки нашей игры Steamhounds.


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

В целом, перед проведением этого эксперимента основная схема и представление информации в нашей игре не были абсолютно ужасными. Опытные игроки и знакомые с жанром пользователи обычно без проблем разбирались с игрой без нашего вмешательства. Но на таких живых мероприятиях бывают люди, которые никогда не видели раньше подобных игр, и эти игроки очень помогают нам, показывая те скрытые странности и допущения, которые мы внесли в дизайн игры.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии6

Процедурное создание зданий

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

Эйвинд Фиксдаль (Øyvind Fiksdal) поделился подробностями процедурного процесса создания дома и ландшафта в Houdini и рассказал о преимуществах такого подхода.


Введение


Меня зовут Эйвинд Фиксдаль, я норвежский художник, раньше работавший в основном с традиционным исскуством. Ближе к тридцати годам я решил полностью сосредоточиться на 3D и поступил на двухлетние курсы 3D и анимации. Спустя какое-то время я устроился на работу в одно из крупнейших рекламных агентств в Норвегии.

Работа в рекламной отрасли открывала все двери, но работа на одну компанию не дала мне возможностей реализации, поэтому я стал фрилансером. Через два года фриланса мы с бывшим коллегой решили объединиться и создать компанию под названием Trollskog.
Всего голосов 49: ↑49 и ↓0+49
Комментарии24

Оптимизируем производительность игры параметрами импорта звука Unity

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

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

Этот документ разделён на пять частей:

  1. Как звук влияет на производительность
  2. Разбираемся с параметрами импорта
  3. Рекомендуемые мной параметры для PC и консолей
  4. Рекомендуемые мной параметры для мобильных платформ
  5. Предостережения и замечания

Оптимизация параметров импорта звука Unity — один из простейших способов оптимизации. В случае небольшого проекта у вас может уйти меньше часа для достижения значительных улучшений во времени загрузки, занятой ОЗУ и других аспектах производительности. Надеюсь, это руководство окажется полезным для вас. Информация актуальна для Unity версии 2018.3
Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии5

Как создать красивую цветовую палитру

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

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

Примечание: это далеко не единственный способ выбора хороших цветов, скорее, набор эвристик, которые я освоил самостоятельно. Надеюсь, что это поможет вам подбирать правильные цвета для вашего веб-сайта/приложения/игры.
Читать дальше →
Всего голосов 27: ↑24 и ↓3+21
Комментарии2

Пиксель-арт: от черновика до игрового ассета

Время на прочтение10 мин
Количество просмотров137K
imageimage
В этой статье я постараюсь визуализировать общий подход к работе. Итак, вы решили учиться арту: вы скачали какое-то ПО, запустили его и увидели все эти опции, бесконечные цвета и многое другое, быстро всё закрыли, удалили программу и выбросили свой ноутбук в окно.

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

Если вам это знакомо, то данная статья как раз для вас, так что продолжайте читать.

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

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

Если возьмётесь за работу очень усердно, то, возможно, получите неплохие результаты через несколько месяцев.
Читать дальше →
Всего голосов 104: ↑103 и ↓1+102
Комментарии20

Шейдеры 3D-игр для начинающих

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

Хотите научиться добавлять в свою 3D-игру текстуры, освещение, тени, карты нормалей, светящиеся объекты, ambient occlusion и другие эффекты? Отлично! В этой статье представлен набор техник затенения, способных поднять уровень графики вашей игры на новые высоты. Я объясняю каждую технику таким образом, чтобы вы могли применить/портировать эту информацию в любом стеке инструментов, будь то Godot, Unity или что-то иное.

В качестве «клея» между шейдерами я решил использовать великолепный игровой движок Panda3D и OpenGL Shading Language (GLSL). Если вы пользуетесь таким же стеком, то получите дополнительное преимущество — узнаете, как использовать техники затенения конкретно в Panda3D и OpenGL.
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии6

Гигабитный линк на 3 километра на лазерных модемах

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


TL;DR В статье описывается наш опыт построения беспроводного соединения на расстоянии 3 километра с помощью лазерных модемов Lantastica TZR без использования радио. Вывод: это действительно работает, реальная ширина канала ~950Mbit/s в дуплексе при задержках <1мс.

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

Мы на практике пройдем все шаги по настройке лазерного линка: от монтажа оборудования на крыше до настройки и тестирования полосы пропускания и задержек.

Основные фичи лазерного модема:

  • Не использует радиочастоты — данные передаются с помощью лазерного луча в невидимом глазу диапазоне 780~850 нм. Не создает радиопомех, не требует разрешение на использование радиочастот
  • Низкие задержки — по сравнению с WiFi оборудованием лазерные модемы имеют задержки сравнимые с кабельным подключением.
  • Сложнее перехват данных — радиомосты легко прослушивать без нарушения сигнала. Перехватить трафик лазерного моста практически невозможно без нарушения соединения.
  • Скрытность — лазерный линк сложно обнаружить из-за узконаправленного луча. Радио линк легко обнаружить даже на значительном удалении от антенн.
Читать дальше →
Всего голосов 166: ↑166 и ↓0+166
Комментарии284

Эффект акрасии: почему мы не выполняем своих планов, и что с этим делать

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

Виктор Гюго; фотографию сделал Этьен Карьят в 1876

К лету 1830 года Виктор Гюго столкнулся с невозможным дедлайном. За двенадцать месяцев до этого знаменитый французский автор договорился со своим издателем, что напишет для него новую книгу, "Собор Парижской Богоматери".

Но вместо работы над книгой, весь год Гюго занимался другими проектами, развлекал гостей, и откладывал работу с текстом. Его издатель всё больше раздражался из-за продолжавшейся прокрастинации автора, и среагировал, установив пугающий крайний срок для сдачи книги. Он потребовал, чтобы Гюго закончил книгу к февралю 1831 – то есть, менее, чем за шесть месяцев.

Гюго разработал план борьбы с прокрастинацией. Он собрал всю одежду, вынес её из комнат и закрыл её на замок. Ему больше нечего было надеть, кроме большой шали. В отсутствии подходящей одежды для выхода наружу, Гюго больше не испытывал искушения покидать дом и отвлекаться. Ему оставалось лишь оставаться дома и писать.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии21

Как мы создавали онлайн-сервис для изучения английского: от стартапа до расцвета

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

В 2014 году мы запустили проект Puzzle English и поделились с обитателями Хабра историей о наших похождениях по инвестиционным фондам в поисках денег. Инвесторы нашлись: венчурные фонды SOLventures и Genezis Capital профинансировали проект. И вот спустя 3 года у Puzzle English есть не только бизнес-план, но и опыт. Опыт превращения в прибыльный бизнес. Реальность преподала нам много уроков, мы набили некоторое количество шишек и совершили немало открытий. Эти три года пролетели незаметно и были насыщены разнообразными событиями. Всем этим багажом новых знаний мы хотим поделиться с вами.


image


Вдруг это поможет вам избежать лишних трудностей на старте вашего проекта.

Читать дальше →
Всего голосов 12: ↑8 и ↓4+4
Комментарии4

ІТ термины на примере процесса выращивания картошки

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

image


Недавно меня спросили, чем разработка на C# отличается от разработки на C++. В результате родилась идея объяснить значение тех или иных ИТ терминов на примере процесса выращивания картошки.

Читать дальше →
Всего голосов 98: ↑84 и ↓14+70
Комментарии87

Почему прокрастинаторы прокрастинируют (откладывают дела «на потом») и как побороть прокрастинацию

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

pro-cras-ti-na-tion |prəˌkrastəˈnāSHən, prō-|
существительное
задержка или откладывание чего-либо: первый совет — избегайте прокрастинации.

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

Избегать прокрастинации. Так элегантно в своей простоте…

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

Нет, «избегайте прокрастинации» — хороший совет только для не настоящих прокрастинаторов. Для тех, кто говорит «Я захожу на Facebook несколько раз в день на работе. Я такой прокрастинатор!». Это те люди, которые будут говорить настоящему прокрастинатору «Не откладывай дела на потом и у тебя все будет хорошо».

Дело в том, что ни словари ни не настоящие прокрастинаторы не понимают, что для настоящих прокрастинаторов прокрастинация — не дополнительная опция. Это что-то, что они не знают как не делать.
Читать дальше →
Всего голосов 28: ↑26 и ↓2+24
Комментарии94

Создание игры Tower Defense в Unity, часть 1

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

Поле


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

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

Туториал создавался в Unity 2018.3.0f2.


Поле, готовое к использованию в тайловой игре жанра tower defense.

Игра жанра Tower Defense


Tower defense — это жанр, в которой целью игрока является уничтожение толп врагов, пока они не добрались до своей конечной точки. Игрок выполняет свою цель, строя башни, которые атакуют врагов. У этого жанра очень много вариаций. Мы будем создавать игру с тайловым полем. Враги будут двигаться по полю в сторону своей конечной точки, а игрок будет создавать им препятствия.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии0

О 3D-графике простыми словами

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

Часть 1. Введение


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

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

Мне кажется, что графика, и в особенности та сложность, какой она достигает в современных играх — это интересная тема. Очень немногим людям любопытно глубоко погружатьcя во все её подробности, но я считаю, что есть темы, которые интересны каждому. Я думаю, что большинству людей, игравших в игры, было любопытно, как получаются те или иные эффекты, или с помощью какой технологии удалось создать такую потрясающую графику в какой-нибудь новой игре.


Есть много составляющих, необходимых для создания даже простой 3D-игры, не говоря уж о таком проекте, как Watch Dogs.

У меня есть только общее представление о том, что нужно рассмотреть в этой статье, но это будет зависеть от того, какие темы вызовут интерес. Тем не менее, основная идея заключается в том, чтобы создать общее описание того, что происходит внутри современной игры, не отпугнув при этом никого из читателей — я буду предполагать, что у вас нет знаний математики и программирования. Если вы знаете разницу между ЦП и графической картой, и отличаете оперативную память от жёсткого диска, то этого будет вполне достаточно, а остальное я объясню.
Всего голосов 48: ↑48 и ↓0+48
Комментарии11

Что такое шаблоны проектирования?

Время на прочтение11 мин
Количество просмотров80K
Вы когда-либо задавались вопросом, что такое шаблоны проектирования? В этой статье будет разъяснено, почему шаблоны проектирования имеют существенное значение, и будет приведено несколько примеров на PHP, поясняющих, когда и где их следует использовать.

Шаблоны проектирования — это допускающие многократное использование оптимизированные решения проблем программирования, с которыми мы сталкиваемся каждый день. Шаблон проектирования — это не класс или библиотека, которые мы можем просто вставить в нашу систему. Он — много больше. Это — некоторый шаблон, который должен быть реализован в надлежащей ситуации. Он не зависит от языка. Хороший шаблон проектирования должен быть таким, чтобы его можно было использовать с большинством языков (если не со всеми) в зависимости от характеристик языка. Чрезвычайно важно то, что любой шаблон проектирования необходимо использовать очень осторожно — если он применён в ненадлежащем месте, то его действие может быть разрушительным и породить много проблем для вас. Однако применённый в нужном месте в нужное время он может стать вашим спасителем.
Читать дальше →
Всего голосов 35: ↑22 и ↓13+9
Комментарии75

ООП мертво, да здравствует ООП

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

Источники вдохновения


Этот пост возник благодаря недавней публикации Араса Пранцкевичуса о докладе, предназначенном для программистов-джуниоров. В нём рассказывается о том, как адаптироваться к новым ECS-архитектурам. Арас следует привычной схеме (объяснения ниже): показывает примеры ужасного ООП-кода, а затем демонстрирует, что отличным альтернативным решением является реляционная модель (но называет её «ECS», а не реляционной). Я ни в коем случае не критикую Араса — я большой фанат его работ и хвалю его за отличную презентацию! Я выбрал именно его презентацию вместо сотен других постов про ECS из Интернета потому, что он приложил дополнительные усилия и опубликовал git-репозиторий для изучения параллельно с презентацией. В нём содержится небольшая простая «игра», используемая в качестве примера выбора разных архитектурных решений. Этот небольшой проект позволил мне на конкретном материале продемонстрировать свои замечания, так что спасибо, Арас!

Слайды Араса выложены здесь: http://aras-p.info/texts/files/2018Academy — ECS-DoD.pdf, а код находится на github: https://github.com/aras-p/dod-playground.

Я не буду (пока?) анализировать получившуюся ECS-архитектуру из этого доклада, но сосредоточусь на коде «плохого ООП» (похожего на уловку «чучело») из его начала. Я покажу, как бы он выглядел на самом деле, если бы правильно исправили все нарушения принципов OOD (object-oriented design, объектно-ориентированного проектирования).

Спойлер: устранение всех нарушений OOD приводит к улучшениям производительности, аналогичным преобразованиям Араса в ECS, к тому же использует меньше ОЗУ и требует меньше строк кода, чем ECS-версия!

TL;DR: Прежде чем прийти к выводу, что ООП отстой, а ECS рулит, сделайте паузу и изучите OOD (чтобы знать, как правильно использовать ООП), а также разберитесь в реляционной модели (чтобы знать, как правильно применять ECS).
Читать дальше →
Всего голосов 55: ↑50 и ↓5+45
Комментарии48

Информация

В рейтинге
Не участвует
Откуда
Уфа, Башкортостан(Башкирия), Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Web Developer
JavaScript
TypeScript
Node.js
React
HTML
CSS