Pull to refresh
9
0

User

Send message

Введение в юнит-тестирование в Unity

Reading time16 min
Views52K
image

Вам любопытно, как работает юнит-тестирование в Unity? Не знаете, что такое юнит-тестирование в целом? Если вы ответили положительно на эти вопросы, то данный туториал будет вам полезен. Из него вы узнаете о юнит-тестировании следующее:

  • Что это такое
  • Его польза
  • Достоинства и недостатки
  • Как оно работает в Unity при использовании Test Runner
  • Как писать и выполнять юнит-тесты, которые будут проходить проверку

Примечание: в этом туториале предполагается, что вы знакомы с языком C# и основами разработки в Unity. Если вы новичок в Unity, то изучите сначала другие туториалы по этому движку.

Что такое юнит-тест (Unit Test)?


Прежде чем углубляться в код, важно получить чёткое понимание того, что такое юнит-тестирование. Если говорить просто, то юнит-тестирование — это тестирование… юнитов.

Юнит-тест (в идеале) предназначен для тестирования отдельного «юнита» кода. Состав «юнита» может варьироваться, но важно помнить, что юнит-тестирование должно тестировать ровно один «элемент» за раз.
Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments4

Скелетная анимация на стороне видеокарты

Reading time6 min
Views17K

Не так давно Unity представила ECS. В процессе изучения мне стала интерестно, а каким образом можно подружить анимацию и ECS. И в процессе поиска я наткнулся на интересную технику, которую применяли ребята из NORDVEUS в своем демо для доклада Unite Austin 2017.
Unite Austin 2017 — Massive Battle in the Spellsouls Universe.


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


Зачем такие сложности, спросите вы?


Ребята из NORDVEUS одновременно отрисовывали на экране большое количество однотипных анимированных объектом: скелетов, мечников. В случае использования традиционного подхода: SkinnedMeshRenderers и Animation\Animator, повлечет за собой увеличение вызовов отрисовки и дополнительную нагрузке на CPU по просчету анимации. И чтобы решить эти проблемы анимацию перенесли на сторону GPU, а точнее в вершинный шейдер.


Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments38

Оптимизация сборки мусора в высоконагруженном .NET сервисе

Reading time16 min
Views31K
Ежедневно в сервисе Pyrus работают десятки тысяч сотрудников из нескольких тысяч организаций по всему миру. Отзывчивость сервиса (скорость обработки запросов) мы считаем важным конкурентным преимуществом, так как она напрямую влияет на впечатление пользователей. Ключевой метрикой для нас является «процент медленных запросов». Изучая ее поведение, мы заметили, что раз в минуту на серверах приложений возникают паузы длиной около 1000 мс. В эти промежутки сервер не отвечает и возникает очередь из нескольких десятков запросов. О поиске причин и устранении узких мест, вызванных сборкой мусора в приложении, пойдет речь в этой статье.


Читать дальше →
Total votes 54: ↑54 and ↓0+54
Comments28

Реализовываем CircularRevealAnimation на Flutter и попутно публикуем библиотеку на pub.dev

Reading time5 min
Views3.8K

В Android есть очень интересная возможность анимации View, которая называется CircularRevealAnimation — дословно "круговое раскрытие". Flutter, в свою очередь, хотя и обладает богатыми возможностями для анимирования виджетов, не предоставляет такую анимацию из коробки.



В этой статье будет показано как реализовать такую анимацию средствами Flutter и опубликовать библиотеку на pub.dev для удобного доступа и распространения.

Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments1

В этой статье слишком много воды

Reading time9 min
Views41K
«Мы начинаем разработку новой игры, и нам нужна классная вода. Такую сможешь?»


, — cпросили меня. «Да не вопрос! Конечно, смогу», — ответил я, но голос предательски задрожал. «А, еще и на Unity?», — и мне стало понятно, что впереди очень много работы.
Читать дальше →
Total votes 175: ↑174 and ↓1+173
Comments36

Mercurial: изменяем историю

Reading time7 min
Views51K
Когда я познакомился с Mercurial, то все свои знания я почерпнул из статей Спольского (перевод на Хабре), которые подробно описывают основные принципы работы Mercurial и ежедневную работу с ним. Долгое время я использовал Mercurial в пределах, которые не превышали объема этих статей. Наверно, для одиночного разработчика этого почти достаточно. Почти. Но Mercurial сегодня значительно шире и обладает возможностями допускающими редактирование истории изменений, наличие которых, в общем-то, не очевидно, хотя возможности эти достаточно ценны. А из комментариев к разным статьям по системам управления версиями видно, что многие разработчики об этих возможностях не знают. Ниже я хочу провести обзор ряда возможностей Mercurial связанных с изменением истории.

О чем пойдет речь:

  • фазы
  • hg commit –amend
  • hg strip
  • hg rebase

Поехали
Total votes 26: ↑25 and ↓1+24
Comments4

Unity Package Manager

Reading time5 min
Views25K
Unity — платформа, которая существует довольно давно и постоянно развивается. Однако, работая в ней с несколькими проектами одновременно, все еще можно столкнуться со сложностями в использовании общих исходников (.cs), библиотек (.dll) и остальных ассетов (изображения, звуки, модели, префабы). В этой статье мы расскажем о нашем опыте работы с нативным решением такой проблемы для Unity.

Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments7

6 полезных ресурсов и сервисов для потенциальных эмигрантов в США, Германию и Канаду

Reading time3 min
Views31K


С недавних пор я активно заинтересовался темой переезда за границу, и в связи с этим изучил существующие сейчас сервисы, которые оказывают помощь в переезде ИТ-специалистам. К моему удивлению, далеко не так много проектов помогают потенциальным иммигрантам. Пока что я отобрал шесть сайтов, которые показались мне интересными.
Читать дальше →
Total votes 55: ↑46 and ↓9+37
Comments34

Учимся всегда и везде! Подкасты для разработчиков на английском языке

Reading time10 min
Views24K


Народная мудрость гласит, что учиться никогда не поздно. А в такой стремительно развивающейся отрасли, как ИТ, это просто жизненно необходимо. У большинства из нас учёба ассоциируется с лекциями в институте или с курсами повышения квалификации, где всегда нужно личное присутствие слушателя. Конечно, есть ещё и системы дистанционного обучения, но они тоже требуют постоянного сидения за компьютером.

А как быть если у вас между делами выдалось свободное время, и вы хотите узнать что-то новое? Здесь вас выручат подкасты. Их можно слушать всегда и везде, дома, на работе, в дороге и даже управляя автомобилем. Вы можете получать свежую информацию там, где вам удобно, главное, иметь под рукой смартфон или планшет, настроенный на нужный канал.

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

Наша подборка русскоязычных подкастов: https://habr.com/ru/company/mailru/blog/437428/

Читать дальше →
Total votes 45: ↑42 and ↓3+39
Comments7

Создаём эффект распространения цвета в Unity

Reading time8 min
Views11K

На этот эффект меня вдохновил эпизод Powerpuff Girls. Я хотела создать эффект распространения цвета в чёрно-белом мире, но реализовать его в координатах мирового пространства, чтобы видеть, как цвет закрашивает объекты, а не просто плоско распределяется по экрану, как в мультике.

Эффект я создала в новом Lightweight Rendering Pipeline движка Unity, встроенном примере конвейера Scriptable Rendering Pipeline. Все концепции применимы и к другим конвейерам, но некоторые встроенные функции или матрицы могут иметь другие названия. Также я воспользовалась новым стеком постобработки, но в туториале опущу подробное описание его настройки, потому что о ней достаточно хорошо рассказывается в других руководствах, например в этом видео.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments10

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

Reading time12 min
Views24K
image

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

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

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

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

Просто о внутренних и внешних настройках для приложения в Unity3D

Reading time15 min
Views8.6K

Введение


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

По традиции начну с предыстории. За время работы в игровой индустрии я разрабатывал различные проекты, с разной сложностью и побывал и в лагере гейм-дизайна, и в лагере программистов (где нахожусь и по сей день). Ни для кого не секрет, что любое приложение требует большого числа различных конфигурационных данных и настроек. В классическом, относительно Unity3d виде, такие настройки выносятся в видимую часть инспектора, где вводятся какие-то цифры и т.п. Я думаю, что говорить об удобстве такого подхода не стоит, это даже если исключить, факт, того, что на время настройки, сцена, в которой находится MonoBehaviour класс блокируется для изменений другими разработчиками. Поэтому после череды разного рода мытарств в прошлом, я решил, написать что-то простое и эффективное, что облегчит всем жизнь и упростит работу с такими данными, чем и хочу поделиться с вами.

Примечание: весь описанный ниже код применим к версии Unity 2018.3+ и использует компилятор Roslyn (версия языка C# 7+).
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments5

Генератор подземелий на основе узлов графа

Reading time11 min
Views28K
image

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

Введение


Алгоритм был написан как часть работы на получение степени бакалавра и основан на статье Ma et al (2014). Целью работы было ускорение алгоритма и дополнение его новыми функциями. Я вполне доволен результатом, потому что мы сделали алгоритм достаточно быстрым, чтобы использовать его во время выполнения игры. После завершения бакалаврской работы мы решили превратить её в статью и отправить на конференцию Game-ON 2018.

Алгоритм


Для создания уровня игры алгоритм получает в качестве входных данных набор полигональных строительных блоков и граф связности уровня (топологию уровня). Узлы графа обозначают комнаты, а рёбра определяют связи между ними. Цель алгоритма — назначить каждому узлу графа форму и расположение комнаты таким образом, чтобы никакие две формы комнат не пересекались, и каждая пара соседних комнат могла соединяться дверьми.
Total votes 51: ↑51 and ↓0+51
Comments11

Манипуляция мешами в реальном времени на Unity

Reading time17 min
Views45K
image

Одно из преимуществ Unity в качестве платформы для разработки игр — её мощный 3D-движок. В этом туториале вы познакомитесь с миром 3D-объектов и манипуляций мешами.

В связи с ростом технологий виртуальной и дополненной реальности (VR/AR) большинство разработчиков сталкивается со сложными концепциями 3D-графики. Пусть этот туториал будет для них отправной точкой. Не волнуйтесь, здесь не будет сложной 3D-математики — только сердца, рисунки, стрелки и куча интересного!
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments4

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

Reading time13 min
Views25K
Человеческий мозг по своей природе очень плохо умеет оценивать вероятность срабатывания случайных событий, на основании выданной числовой оценки. И довольно хорошо на основании качественных оценок. А все потому, что человек мысленно делает конвертацию числовых вероятностей в качественные оценки, и делает это очень субъективно:

  • 80% попадания выстрела в игре — ну это почти гарантированное попадание;
  • 80% того, что ваш товарищ хоть когда-нибудь отдаст долг — не-не-не, так не пойдёт, это слишком большой риск;
  • 5% получения критического урона он NPC врага — маловероятно, риск можно игнорировать;
  • 1% риск падения сосульки, если пройти под крышей с капающими метровыми сосульками — ещё чего, лучше обойти с другой стороны тротуара;
  • 51% вероятность выигрыша в мини-игре в большой РПГ — можно рассчитывать на то, что после 20 ставок я чуть-чуть выиграю или, как минимум, останусь при своих… через 20 ставок… как такое могло случиться, что я проиграл половину всего своего золота? Тут явно сломан генератор случайных чисел!


В статье будут рассмотрены следующие вопросы:

  • ошибочные допущения в оценке вероятностей;
  • конкретные примеры заблуждений игроков и фактические вероятности «редких» событий;
  • генератор случайных чисел (вообще-то псевдослучайных);
  • ранние простые генераторы псевдослучайных чисел на примере Final Fantasy I;
  • подходы к реализации случайных событий с воспроизводимостью и без;
  • примеры удачно внедренных разных подходов и манипуляции в Fire Emblem.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments37

Unity: сжимая сжатое

Reading time5 min
Views29K

Результат: информация о цвете занимает 1/64 от исходной площади при достаточно высоком качестве результата. Тестовое изображение взято с этого сайта.

Текстуры практически всегда являются наиболее значимым потребителем места как на диске, так и в оперативной памяти. Сжатие текстур в один из поддерживаемых форматов относительно помогает в решении этой проблемы, но что делать, если даже в этом случае текстур очень много, а хочется еще больше?
Что же делать?
Total votes 70: ↑69 and ↓1+68
Comments69

Трассировка лучей на GPU в Unity

Reading time16 min
Views21K
Для трассировки лучей (ray tracing) настали удивительные времена. Компания NVIDIA реализует ускоренное с помощью ИИ шумоподавление, Microsoft объявляет о нативной поддержке в DirectX 12, а Питер Ширли продаёт свои книги по свободной цене (pay what you want). Похоже, что трассировка лучей наконец получила шанс быть принятой при дворе. Возможно, говорить о начале революции ещё слишком рано, но уже определённо стоит начать изучать и накапливать знания в этой области.

В этой статье мы напишем с нуля в Unity очень простой трассировщик лучей с помощью compute shaders. Скрипты мы будем писать на C#, а шейдеры — на HLSL. Весь код выложен на Bitbucket.

В результате у нас получится отрендерить нечто подобное:

Читать дальше →
Total votes 38: ↑38 and ↓0+38
Comments8

Как мы удвоили скорость работы с Float в Mono

Reading time6 min
Views8.2K

Мой друг Aras недавно написал один и тот же трассировщик лучей на разных языках, в том числе на C++, C# и компиляторе Unity Burst. Разумеется, естественно ожидать, что C# будет медленнее, чем C++, но мне показалось интересным, что Mono настолько медленнее .NET Core.

Опубликованные им показатели были плохими:

  • C# (.NET Core): Mac 17.5 Mray/s,
  • C# (Unity, Mono): Mac 4.6 Mray/s,
  • C# (Unity, IL2CPP): Mac 17.1 Mray/s

Я решил посмотреть, что происходит, и задокументировать места, которые можно улучшить.

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

  • Во-первых, необходимо улучшить параметры Mono по умолчанию, потому что пользователи обычно не настраивают параметры у себя
  • Во-вторых, нам нужно активнее знакомить мир с бекэндом оптимизации кода LLVM в Mono
  • В-третьих, мы улучшили настройку некоторых параметров Mono.

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

Результаты на моём домашнем iMac для Mono и .NET Core были следующими:

Рабочая среда Результаты, MRay/sec
.NET Core 2.1.4, отладочная сборка dotnet run 3.6
.NET Core 2.1.4, релизная сборка dotnet run -c Release 21.7
Ванильный Mono, mono Maths.exe 6.6
Ванильный Mono с LLVM и float32 15.5
Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments10

Как айтишнику найти работу в США и ЕС: 9 лучших ресурсов

Reading time5 min
Views169K
Мировой рынок IT стремительно развивается. С каждым годом профессия разработчика софта становится все более востребованной — уже в 2017 году в мире насчитывался примерно 21 миллион программистов различных направлений.

К сожалению, русскоговорящий рынок IT находится еще на начальной стадии развития — уже есть крупные и успешные проекты, но рынок еще долго не сможет сравняться с европейским и американским, которые производят до 85% всех IT-продуктов мира.
Читать дальше →
Total votes 53: ↑52 and ↓1+51
Comments25

Information

Rating
Does not participate
Registered
Activity