Как стать автором
Обновить
10
0

Unity3D developer

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

Дельта компрессия и квантизация объектов в C#

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

Cтатья затрагивает тему сериализации данных, которые передаются по unreliable каналам.

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

В статье вы узнаете, как с помощью дельта компрессии и квантизации можно уменьшить размер объектов и, тем самым, уменьшить размер сериализованных данных. Попутно мы познакомимся с библиотекой для битовой сериализации данных NetCode.

Читать далее
Всего голосов 34: ↑33 и ↓1+35
Комментарии18

Игровая камера: сборник приемов

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

Сегодня мы узнаем:

- можно ли считать людей, которые инвертируют оси в играх, лицами с нетрадиционной ориентацией;

- что такое фокусное расстояние объектива и для чего оно нужно;

- какой угол обзора надо делать у камер, чтобы монитор выглядел, как окно в виртуальный мир;

- как правильно фотографировать;

- и сделаем простенький симулятор дрифта.

Погнали!
Всего голосов 62: ↑62 и ↓0+62
Комментарии23

.Net Microservices The Hardcore Way: туториал от инженеров Microsoft, получаем PROD опыт

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

Для тех кто хочет погрузиться в проектирование .Net микросервисов, Kubernetes, Azure и Azure DevOps процессы. 

Читать далее
Всего голосов 16: ↑14 и ↓2+14
Комментарии7

Пересаживаем высоконагруженный игровой проект с Photon на кастомные решения

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


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

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

В нашем случае такая обработка вылилась в собственные реализации тех или иных компонентов. Матчмейкинг и социальные фичи перекочевали в отдельные сервисы, новые игровые механики реализовывались на сервере для лучшей согласованности. В итоге от Photon остался транспорт, прослойка PUN на стороне клиента и некоторые сопутствующие расходы в виде лицензии, привязки к Windows и .Net Framework и чрезмерных аллокаций на клиенте.

Стало понятно, что затраты на фреймворк превышают его ценность, и надо тiкать.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии3

Воссоздаем Minecraft-подобную генерацию мира на Python

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

Minecraft, самая продаваемая игра в мире, наиболее известная своими пикселизированными блоками и бесконечными мирами, содержит потрясающий процедурный генератор ландшафта — с пещерами, водоёмами, и даже различными биомами.

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

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

В детстве мне нравилось играть в Minecraft, и мне всегда было интересно, как эта игра генерирует бесконечные миры. В данной я статье я попытаюсь воссоздать это на Python.

Прим. переводчика. Осторожно, в статье много иллюстраций (в том числе анимированных)

Читать далее
Всего голосов 57: ↑57 и ↓0+57
Комментарии13

Как я сделал Discord бота для игровой гильдии с помощью .NET Core

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

Всем привет! Недавно я написал Discord бота для World of Warcraft гильдии. Он регулярно забирает данные об игроках с серверов игры и пишет сообщения в Discord о том что к гильдии присоединился новый игрок или о том что гильдию покинул старый игрок. Между собой мы прозвали этого бота Батрак.

В этой статье я решил поделиться опытом и рассказать как сделать такой проект. По сути мы будем реализовывать микросервис на .NET Core: напишем логику, проведем интеграцию с api сторонних сервисов, покроем тестами, упакуем в Docker и разместим в Heroku. Кроме этого я покажу как реализовать continuous integration с помощью Github Actions.

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

Читать далее
Всего голосов 13: ↑11 и ↓2+11
Комментарии4

Еще пять инструментов против читеров на мобильном проекте с DAU 1 млн пользователей

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

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

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

• Защита от измененных версий.
• Photon Plugin.
• Серверная валидация инаппов.
• Защита от взлома оперативной памяти.
• Собственная аналитика.

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

Читать далее
Всего голосов 41: ↑41 и ↓0+41
Комментарии10

Запуск игры на Unity из приложения SwiftUI для iOS

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

С версии 2019.3 Unity поддерживает загрузку и выгрузку игры на Unity из нативного приложения для iOS или Android с помощью функции «Unity as a Library». Это удобный способ встроить игру в нативное мобильное приложение и отделить логику игры от логики iOS-приложения.

Unity дает инструменты, которые позволяют управлять загрузкой, активацией и выгрузкой библиотеки среды выполнения в нативном приложении. В остальном процесс сборки мобильного приложения остается в основном неизменным. Unity позволяет создавать проекты для Xcode (iOS) и Gradle (Android).

Однако сам процесс встраивания может быть довольно сложным, особенно если нужно интегрировать игру на Unity в приложение SwiftUI. Но не волнуйтесь: именно с этим вопросом мы сейчас и разберемся!

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

Вычисляем баллистические траектории в играх

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

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

Когда возникала эта проблема, я обычно брал ручку с блокнотом и решал её с нуля. Мне это надоело. Чтобы сэкономить себе из будущего немного времени, я выложу это решение в Интернет. Кроме того, я расскажу о необычной «фишке», которую предпочитаю использовать из соображений эстетики.

Уравнения движения


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

Существует четыре основных уравнения движения. В статье мы воспользуемся только одним.
Всего голосов 26: ↑24 и ↓2+25
Комментарии18

Разворачиваем сервер для проверки In-app purchase за 60 минут

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

Всем привет! Сегодня расскажу вам как развернуть сервер для проверки In-app Purchase и In-app Subscription для iOS и Android (server-server validation).


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


В проверке чеков покупок нет никакой технической сложности, по факту сервер просто «проксирует» запрос и сохраняет данные о покупке.



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

Разработка своего устройства от А до Я. Часть 1: От концепции до макета

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

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


  • Часть 1: От концепции до макета
    • Что такое электронное устройство
    • Концепция устройства
    • Функциональная схема
    • Принципиальная схема
    • Закупка компонентов
    • Макетирование и симуляция устройства
  • Часть 2: Создание устройства
    • Разработка печатной платы
    • Разработка корпуса и оснасток
    • Верификация и исправление ошибок
    • Отправка платы на производство
    • Создание корпуса
    • Сборка и отладка устройства

Далее повествование будет вестись от лица сотрудника.

Читать дальше →
Всего голосов 33: ↑31 и ↓2+42
Комментарии13

Быстрый поиск касательных и пересечений у выпуклых многоугольников

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

Я недавно сделал маленькую библиотеку для решения задачи поиска кратчайшего пути на 2D карте с выпуклыми препятствиями. В процессе реализации я придумал пару алгоритмов и трюков, описания которых я нигде не встречал. Поэтому делюсь этими "изобретениями" с общественностью.


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

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

Ортолинейная сплит клавиатура — это что такое? Обзор Iris Keyboard

Время на прочтение13 мин
Количество просмотров104K
За сто с лишним лет клавиатуры сильно изменились внешне: стали лёгкими, тонкими, есть даже проекционные со сканером. Но рынок ничего не меняет в их раскладке («QWERTY» появилась в 1890 году), клавиатуры не стали удобней для пальцев, не адаптированы для положения кистей и предплечий. Всё человечество стало проводить жизнь за компьютером, но эргономика главного инструмента ввода осталась в позапрошлом веке.

Я решил узнать, можно ли купить удобную клавиатуру в 2020 году. Краткий ответ: пришлось паять самому.


Всего голосов 100: ↑96 и ↓4+114
Комментарии293

Пишем пошаговую PvP-арену с одновременными ходами

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


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

DDD, Hexagonal, Onion, Clean, CQRS… как я собрал всё это вместе

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


Эта статья — часть «Хроники архитектуры программного обеспечения», серии статей об архитектуре ПО. В них я пишу о том, что узнал об архитектуре программного обеспечения, что я думаю об этом и как использую знания. Содержание этой статьи может иметь больше смысла, если вы прочитаете предыдущие статьи в серии.

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

С тех пор я всегда чувствовал, что мне нужно восстановить «потерянное» время и узнать как можно больше, как можно быстрее. Поэтому я стал немного увлекаться экспериментами, много читать и писать, уделяя особое внимание дизайну и архитектуре программного обеспечения. Вот почему я пишу эти статьи, чтобы помочь себе в обучении.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии14

Создание карандашного эффекта в SVG

Время на прочтение7 мин
Количество просмотров11K
Моя игра Dragons Abound создаёт карты в векторном графическом формате SVG. Векторная графика имеет множество особенностей (например, зум без потерь), что удобно для карт. Также векторная графика хороша для создания чётких линий, например, чернильных контуров:


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


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

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

Быстрое создание чиптюн-музыки на открытом ПО

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

Итак, вы делаете свою игру, добавляете новые функции и тестируете их. Да, получается совсем неплохо. Но чего-то не хватает — игра слишком тихая. Вам нужна музыка. Разумеется, можно найти и скачать бесплатную музыку из Интернета, но это не геймдев, это использование чужой работы. Так что давайте напишем собственную музыку. Вот как будет звучать написанная вами музыка [прим. пер.: перед прослушиванием уменьшите громкость]:


Это то, что у меня получилось к концу туториала

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

Создавать музыку непросто. Но и не суперсложно. Да, можно стать музыкантом и изучать труд композитора и т.п., но мы делаем хобби-игру, поэтому таких знаний нам не требуется. Я пошагово объясню, как создать музыку.
Всего голосов 18: ↑17 и ↓1+25
Комментарии18

Некоторые аспекты работы с Dictionary при разработке нагруженных приложений

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

На написание этой небольшой заметки меня подтолкнуло несколько проведенных в последнее время собеседований на должность ведущего разработчика в нашу компанию. Некоторые соискатели, как оказалось, недостаточно разбираются в том, что же это за механизм такой, Dictionary, и как его нужно использовать. Столкнулся даже с весьма радикальным мнением: мол, словарь работает очень медленно, причем из-за того, что при создании сразу же помещается в куче больших объектов (LOH), использовать его в коде нельзя и лучше применять запросы к обычным коллекциям с помощью фильтров LINQ!

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

Советы по использованию алгоритма коллапса волновой функции

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

В последнее время я много экспериментировал с процедурной генерацией на основе ограничений. В частности, с алгоритмом Wave Function Collapse (WFC, коллапс волновой функции). Я даже написал собственную open source-библиотеку и ассет unity.

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

В этой статье я расскажу, чему научился и что сможет поднять генераторы на основе ограничений на новый уровень.
Всего голосов 36: ↑36 и ↓0+36
Комментарии4

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

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

Эта неделя была короткой, в понедельник и вторник я продолжал работать над системой 2D-освещения. Остальное время я потратил на реализацию деревьев квадрантов (quadtree).

В этой статье я поделюсь своей реализацией и мыслями, возникшими в процессе её проектирования.

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

Quadtree — это структура данных разбиения пространства. Её основное преимущество по сравнению с другими структурами данных заключается в адаптивности. Оно обеспечивает хорошую производительность при вставке, удалении и поиске. То есть мы можем использовать это дерево в динамическом контексте, где данные часто меняются. Более того, эту структуру довольно легко понять и реализовать.

Если разбиение пространства для вас новая тема, то рекомендую прочитать эту статью Роберта Нистрома. Если вы хотите более подробно узнать о деревьях квадрантов, то прочитайте эту или эту статьи.
Читать дальше →
Всего голосов 46: ↑46 и ↓0+46
Комментарии7

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность