GameDev Architecture
1.22K subscribers
3 photos
2 files
74 links
Привет! На канале я делюсь своими заметками о том, как игровым компаниям строить правильные, эффективные и красивые решения, в основном на C#.

Рекламу не размещаю
Download Telegram
Разработка игры — это не только геймплей

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

Погоди ка! Не так быстро. Давай пройдемся по чек листу.

+ Геймплей — это самая интересная часть для разработчика, но самая ли важная?
- Матчмейкинг — если ваша игра предполагает PvP, то нужен сервис, гарантирующий честный бой
- Защита от читеров — если ваша игра предполагает взаимодействие несколько игроков, то вам по-любому нужна защита от читеров. Железобетонная защита — авторитарный сервер. И если вы этого не учтете на раннем этапе, то вас ждет много часов радости по переносу части геймплея на сервер
- Внутриигровой магазин — если нечего купить, то куда игрок будет тратить деньги?
- Банк — нужно дать пользователю возможность обменять реальные деньги на внутриигровую валюту
- Проверка денежных транзакций — нельзя забывать про читеров, если транзакции не проверять, то читеры подделают их, и поломают вам весь баланс, и вряд ли честные пользователи будут рады этому
- Восстановление покупок — если в игре есть уникальные вещи, которые доступны за микротранзакцию, пользователи обязательно захотят их восстановить после переустановки игры. Если такой возможности нет, то ничего хорошего это вам не сулит
- Интеграция рекламы — да-да, никто не любит рекламу. Но так ли это? На самом деле исследования показывают, что "не-платящие" пользователи, да и платящие тоже, не прочь получить что-нибудь в игре на халяву за просмотр рекламы/видео. А для вас — это еще один способ заработать
- Сохранение прогресса — игроки могут удалять вашу игру. А потом устанавливать заново, соскучившись. Как думаете, хотят ли они начинать все с нуля? А если они хотят продолжить играть на другом устройстве? Хранить прогресс игры на самом девайсе — не самый надежный вариант. А чтобы хранить прогресс на сервере — нужна привязка к какому-либо аккаунту. Вы же не думаете, что в 2018 году кто-то желает входить по логину и паролю? Смотрите интеграцию с соц. сетями ниже.
- Саппорт — если вам будут платить деньги за игру, то наверняка и будут жаловаться в духе "Я заплатил доллар! А тут не работает! Верни деньги или почини!". И если у вас не будет канала связи с разработчиком, то люди могут просто сделать рефанд. Плюс через этот канал могут жаловаться и на читеров, или на несправедливый баланс.
- Логи — все нужно логировать. Если пользователь обращается в суппорт, то круто добавить кнопку "отправить лог", чтобы не верить пользователю на словах. А то многие я любят говорить "Я заплатиль $100500, а деньга не пришель". А на самом деле пользователь забашлял $1, и тот уже потратил на какую-то фигню. Логи и аналитика — важный инструменты для выяснения истинного положения вещей.
- Поддержка разного качества графики — люди играют на устройствах с разной производительностью. Ваша игра должна запускаться и быстро работать на любых устройствах (в разумных пределах, конечно). Причем на топовых устройствах люди ожидают увидеть ВАУ графику. Этот пункт сулит много часов веселья. Оптимизация интерфейса, шейдеров, текстур, уровней, памяти, моделей и т.д.
- Локализация — когда вы делитесь своим шедевром с миром, вы же не думаете, что все знают ваш родной язык? Или даже английский? Если вы хотите завоевать ВЕСЬ мир, то должны поддерживать все основные языки.
- Сбор телеметрии — а что если ты выпустил игру, и она падает на старте, только на тех устройствах, которых у тебя физически нет. Как узнать о критических ошибках, падениях игры, сбоях, ну и просто иметь представление о тех девайсах, на которых люди играют?
- Сбор аналитики — в предыдущем посте я рассказывал уже в кратце. Что если все пользователи застряли на 3 уровне? Может это признак бага? Если пользователи не будут продвигаться дальше, то скорее всего уйдут. А если вы где то разместили рекламу игры, как узнать ее эффективность без аналитики? А какую вещь люди покупают больше всего? Без аналитики вы будете слепы.

Это еще не все!
Продолжение ниже :)
- Система динамической конфигурации — баланс игры — дело тонкое. Его нужно постоянно мониторить и править. Будете ли вы каждый раз обновлять клиент игры, если надо поменять всего один параметр в балансе? Или если необходимо обновить/добавить локализацию?
- Система скачиваемого контента — даже когда разработчик завершил свою работу над игрой, она продолжает жить. Без программных обновлений, игра может развиваться. Новые уровни, новые вещи, новые персонажи и т.д. Пусть работают худождники/моделлеры/геймдизайнеры.
- Интеграция с социальными платформами — игроки — это ваши друзья. Если игра им нравится, они сами будут рассказывать об этом. Очень важно дать им такую возможность. Пусть кричат об этом в соц. сетях и приводят друзей
- Масштабирование игры — может заключаться в нескольких аспектах. Первый — пользователи. Представьте, что фишка с соц. сетями удалась, и к вам повалила куча пользователей. Есть ли у вас сервер? Справится ли ваша инфраструктура с этим? Второй аспект — увеличение объемов самой игры. Количество функций, контент, интерфейс — все растет со временем. И если вы тестировали игру с 10 уровнями, и все было отлично, то велик шанс, что при 100 уровнях все начнет тормозить. Самый простой способ — генерировать контент-заглушки, раздувая тем самым объем игры, и смотреть как она себя ведет.
- Публикация в сторах — если вы планируете поддерживать несколько сторов, то нужно это учитывать. Нужно будет интегрироваться с каждым отдельно. Ведь система микротранзакций и других платформозависимых фич у каждого стора и платформы своя. Нельзя забывать про разные операционные системы. Если вы используете кросс-платформенный движок типа Unity, то часть геморроя с вас снимается. Если нет — то у меня для вас печальные новости. Портирование движка на другую платформу — та еще радость.

Черт возьми! Вот сколько еще работы помимо геймплея!

Это на вскидку те пункты, которые вспомнил. Для новичков — будет полезно иметь полную перспективу. А профессионалы, может, дополнят список, если я что-то забыл.

В дальнейших постах я буду выкладывать ссылки на статьи, которые поясняют как сделать один из пунктов. Часть статей еще предстоит написать.

Хотите быть в курсе? Подписывайтесь на канал ;)

А так, вообще, это напоминание, что не все в игровой разработке про фан.
Считаю прекрасная статья. Особенно про тесты. И если вы думаете, что в геймдеве тесты не применимы, то очень зря.
Двустороннее взаимодействие с сервером в реалтайме

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

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

Сделать чат на REST API можно, но зачем? REST API подразумевает синхронную связь, а сама концепция чата подразумевает асинхронность.

Выход прост — использовать транспорт, поддерживающий двустронний асинхронный обмен сообщениями. Для разрабочика на Unity логично использовать C# и на сервере.

SignalR — довольно известная библиотека от #Microsoft. Предполагается ее использовать с ASP.Net.

К сожалению, Unity все еще на .Net Framework 3.5, что не позволяет использовать SignalR. Но есть порт под Unity.

Если вы используете последние версии Unity, то там есть экспериментальная поддержка .Net Framework 4.6. Поэтому можете попробовать запустить и оригинальную версию.

Работа с SignalR довольно проста:


// setup proxy
HubConnection connection = new HubConnection("http://localhost:58438/");
IHubProxy proxy = connection.CreateProxy("TestHub");

// subscribe to event
proxy.Subscribe("ClientPing").Data += data =>
{
JToken data = data[0] as JToken;
Console.WriteLine("Received push from server: [{0}]}", data["message"].ToString());
};

// start connection
connection.Start();


Больше информации — в официальной доке.

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

Туториал учит концепции переиспользования компонентов. Плюс показывает чем полезен паттерн Publisher / Subscriber, используя Unity's Event System

http://telegra.ph/Sozdanie-sistemy-bonusov-v-Unity-02-08
Не одним Unity мы живем =)
Сегодня я хочу пошарить вам #gamedevblog инди разработчика, пишущего 2d игру на Lua/LÖVE.

В блоге описывается процесс создания игры, принципы имплементации игровых механик, вроде дерева навыков и т.п.
Так же есть несколько интересных статей по #AI и #bestpractices. Блог на английском.

https://github.com/SSYGEN/blog

#tutorial #lua #love #gamedevblog #AI #bestpractices #english
Как формат постов удобнее читать?
anonymous poll

Короткий пост в телеграме + ссылка на Telegraph (Instant View) – 56
👍👍👍👍👍👍👍 69%

Лонгпост в телеграме – 15
👍👍 19%

Короткий пост в телеграме + ссылка на лонгрид – 10
👍 12%

👥 81 people voted so far.
Channel name was changed to «GameDev Architecture»
Привет! Я решил, что стоит немного сместить фокус канала на более "продвинутые" темы в разработке. Я сам работал в нескольких крупных игровых студиях. Сейчас я помогаю строить архитектуру разным игровым компаниям.

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

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

Хотя я и меняю фокус канала на #gamedev, проблемы, освещаемые мной, актуальны во многих других сферах, включая #frontenddev #backenddev. Ведь, игровая разработка многогранна и редко существует, например, без бэкэнда.

Так же я прислушиваюсь к результатам опроса. Сегодня пробую новый формат со ссылкой на Long-post.

Как всегда, рад услышать ваши комментарии/мысли @poisonous_john. Либо пишите прямо на medium ;).

#architecture #advanced #bestpractices #dependencyinjection #inversionofcontrol #unity

http://goo.gl/NP9Yfy
Похоже instant view не дружит с gist, поэтому там нет примеров кода :(, советую пользоваться ссылкой, если вы читаете с телефона.

В следующих постах обещаю что-нибудь придумать с этим

Забыл упомянуть, прежде канал назывался "Пещера Ядовитого Джона".
Хочу поделиться интересным каналом. Часто не бывает времени уследить за всеми событиями, а тут все удобно собрано в одном месте.

Календарь событий игровой индустрии - информирует о проходящих событиях игровой индустрии и крупных конференций на территории СНГ.
https://t.me/gamedev_calendar
Статья описывает типичные проблемы сетевого мультиплеера.

Автор, местами, применяет интересные решения.

http://etodd.io/2018/02/20/poor-mans-netcode/

#multiplayer #networking #english
Привет! Давно не постил. Был в отпуске и работал над новой статьей.

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

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

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

https://habrahabr.ru/post/350630/
Blueprints в #unity: Bolt Visual Scripting.

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

Так же можно использовать для обновления логики БЕЗ пересборки бинарника.

#asset

Bolt brings complete visual scripting to Unity, empowering artists, designers and programmers to create gameplay mechanics and interactive systems without writing a single line of code.

Price: $70 per seat
Free: with Unity Plus

https://assetstore.unity.com/packages/tools/visual-scripting/bolt-87491
Ловите еще одну мою статью: "Своя игровая аналитика за $300 в месяц"

https://github.com/PoisonousJohn/articles/blob/master/Custom_Analytics/custom-analytics-1.md
При разработке часто встает дилемма: попроще или подольше?

Многие студии выбирают Photon (или любой другой easy-to-go фреймворк) для сетевого мультиплеера. Это дает быстрый старт, но что потом?

#note #architecture

https://aka.ms/B42a6e