Всемирная паутина зародилась на NeXTCube с процессором 256 МГц, 2 ГБ диска и монитором шкалы серого под управлением ОС NeXTSTEP. Сэр Тим Бернерс-Ли разместил первую веб-страницу в Интернете 6 августа 1991 года, работая в ЦЕРНе в Женеве, Швейцария. Онлайн-игры появились в начале семидесятых. В то время доски объявлений Dial-up давали игрокам возможность играть в игры через Интернет. В 1990-х годах новые технологии позволили игровым сайтам появляться повсюду в Интернете. Система клиент-сервер предоставила онлайн-играм возможность функционировать в больших масштабах.
Функции
Игровой клиент имеет 4 основные функции: получение входных данных, анализ данных, предоставление обратной связи, настройка системы.
Получает ввод
Анализирует данные
Игровой клиент декодирует и отображает информацию, составляющую игровой мир, включая объекты, хранящиеся в компьютере, и результаты действий игроков, а затем транслирует эту информацию в пользовательский интерфейс и устройства вывода.
Дает обратную связь
Сервер обрабатывает информацию и отправляет ее клиенту. Клиент будет отображать обработанную информацию игроку в соответствии с точкой зрения игрока, так что каждый игрок будет иметь разную перспективу на экране из-за их частных клиентов.
Отрегулируйте систему
Клиент также обнаружит любые изменения, сделанные игроками во время игровой сессии, включая макеты и настройки. Поскольку игра ведется в реальном времени, и игроки постоянно отправляют действия, клиент постоянно обрабатывает информацию и соответствующим образом корректирует систему.
Пример приложения
1. Клиент извлекает данные, хранящиеся в архивах компьютера. Это включает в себя статистику игрока, объекты карты, мобов, иллюстрации, поведение персонажей и другие статические данные для создания окружения игрока.
4. Другие игровые клиенты также знают об атаке, совершенной 7Turtle7, но в зависимости от их точки зрения, их клиенты определяют, отображается ли им эта информация или нет. Например, клиент игрока в противоположной команде знает об атаке, но он не будет отображать изменения для этого игрока, поскольку игра устанавливает его так, что нужно обнаружить, что 7Turtle7 выполняет такой ход, только тогда он будет отображаться на их выходах.
использование
Принятие технологии
Для многих разработчиков игр внедрение технологий является ключом к их разработке. Стандартизированные платформы, такие как HTML 5 и JavaScript, могут обеспечить интеграцию мультимедиа и более глубокую разработку. Клиент игры предоставляет такую возможность.
Пользовательский опыт
Сотрудничество с сотрудниками
По мере развития игры будут добавляться новые функции. Вместо небольшой сплоченной команды, которая не требует особого сотрудничества в начале игры, в разработанной игре обычно есть несколько отделов, работающих вместе над поиском решения, и для этого требуется, чтобы все отделы работали согласованно.
Часто можно услышать: «Надо скачать клиент игры». Давайте разберемся, что такое клиент.
В отличие от браузерных игр, для которых необходим только браузер, существует большая группа игр под названием клиентские игры онлайн. Для того, что бы играть в них, необходимо скачать дистрибутив игры, или иначе – клиент. Клиент это, маленькая (а зачастую, совсем немаленькая) программа, написанная специально для конкретной игры, это как бы часть игры, уже установленная на ваш компьютер.
В этом клиенте уже прописаны персонажи и локации игры, и остается только вдохнуть жизнь в нее. Что и происходит, когда вы запускаете программу. Клиент, посредством браузера, соединяется с сервером, на котором расположена игра, и, вуаля, вы в шоколаде, игра началась.
Зачем нам нужен это гемморой, спросите вы. Все просто. Напомним, что клиент это, программа с уже установленной частью игры. В этой части прописаны персонажы, реализована 3D графика и многие другие детали игры. То есть, ваш компьютер принимает на себя часть нагрузки сервера. Что в свою очередь позволяет более продуктивно и главное быстрее общаться вашему компьютеру с сервером.
Серверу нет нужды, каждый раз пересылать на ваш компьютер то, что уже заложено в дистрибутиве. Этим достигается изумительная по качеству 3D графика, спецэффекты, детализация персонажей и качественно проработанные локации.
Я думаю, теперь вам понятно, что такое клиент, и что клиент это, вещь необходимая для клиентских онлайн игр. Ну а теперь добавим немножко дегтя в бочку с медом. Во первых сам процесс скачивания и установки дистрибутива может длиться как 5-10 минут, так и целый час. Второе и главное: практически каждый день приходят обновления клиента, которое тоже надо скачать и установить. А ты, вместо того, чтобы начать играть, сидишь, пьешь пиво, и ждешь, когда же закачается этот долбаный апдейт. А в остальном, прекрасная маркиза, все хорошо, все хорошо.
Советуем почитать интересное мнение по поводу компьютерных игр в этой статье.
Игровой профиль позволяет разнообразить прохождение игр, добавляя систему достижений и наград. Вы можете соревноваться с друзьями и повышать свой уровень, получая очки за новые достижения.
С помощью Google Play Игры вы получите доступ к вашим игровым достижениям даже на новом устройстве или после сброса до заводских настроек. Многие игры используют профиль Google Play Игры для облачных сохранений и синхронизации данных.
В приложении Google Play Игры вы сможете просматривать каталог популярных мобильных игр, находить и устанавливать новые игры, а также получить доступ к личной библиотеке игр, включая список удалённых игр, в которые вы играли раньше.
Функции Google Play Игры
Как скачать Google Play Игры
Перейдите на страницу загрузки и выберите версию для вашего устройства.
На Pixonic DevGAMM Talks выступал еще наш DTO Антон Григорьев. Мы в компании уже говорили, что работаем над новым PvP-шутером и Антон поделился некоторыми нюансами архитектуры этого проекта. Он рассказал, как построить разработку, чтобы изменения в игровой логике клиента появлялись на сервере автоматически (и наоборот), и можно ли не писать код, но при этом минимизировать трафик. Ниже — запись и расшифровка доклада.
Не буду учить, как что-то делать, расскажу о том, как это делали мы. Чтобы вы не наступили на те же грабли и могли использовать наш опыт. Еще полтора года назад мы в компании не умели делать шутеры на мобилках. Вы скажете, как же так, у вас же есть War Robots, 100 млн загрузок, 1,5 млн DAU. Но в этой игре роботы очень медленные, а мы хотели сделать быстрый шутер и архитектура War Robots не позволяла этого.
Мы знали, как и что делать, но у нас не было опыта. Тогда мы наняли человека, у которого этот опыт был и сказали: сделай то же самое, что ты уже сто раз делал, только лучше. Потом сели и начали думать об архитектуре.
Пришли к Entity Component System (ECS). Думаю, многие знают, что это такое. Все объекты мира представлены сущностями. Например, игрок, его пушка, какой-то объект на карте. У них есть свойства, которые описываются компонентами. К примеру, компонент Transform — это положение игрока в пространстве, а компонент Health — это его здоровье. Есть логика — она отдельна и представлена системами. Обычно системы — это метод Execute(), который проходится по компонентам определенного типа и что-то делает с ними, с игровым миром. Например, MoveSystem проходится по всем компонентам Movement, смотрит скорость в этом компоненте, параметр и на основе этого вычисляет новое положение объекта, т.е. записывает его в Transform.
У такой архитектуры есть свои особенности. Когда разрабатываешь на ECS, нужно думать и делать по-другому. Один из плюсов — это композиция вместо множественного наследования. Помните этот ромбик с множественным наследованием в С++? Все его проблемы. В ECS этого нет.
Вторая особенность — это разделение логики и данных, про которое я уже говорил. Что это нам дает? Мы можем пачками хранить состояние мира и его историю, можем сериализовать, можем отправлять эти данные по сети и менять их в real-time. Это всего лишь данные в памяти — мы можем в любое время изменить любое значение. Таким образом очень удобно менять логику игры (или для дебага).
Также очень важно следить за порядком вызова систем. Все системы идут друг за другом, вызываются методом Execute() и, в идеале, должны быть независимыми. На практике такого не бывает. Одна система что-то меняет в мире, другая система потом это использует. И если мы этот порядок нарушим — игра будет идти по-другому. Вероятно не сильно, но точно не так, как раньше.
Наконец, одна из главных и самая важная для нас особенность — мы можем выполнять один и тот же код, как на клиенте, так и на сервере.
Дай разработчику возможность, и он найдет 99 способов и причин делать свое решение, а не использовать уже существующие. Думаю, многие так делали. Мы на тот момент искали ECS Framework. Рассматривали Entitas, Artemis C#, Ash.net и собственное решение, которое могли бы написать по опыту пришедшего к нам специалиста.
Не пытайтесь прочитать, что написано на слайде, это не так важно. Важно то, сколько зеленого и красного в столбцах. Зеленое — значит, что решение поддерживает требования, красное — не поддерживает, желтое — поддерживает, но не совсем.
В столбце ECS — потенциально наше решение. Как видите, оно круче — мы могли бы поддерживать намного больше требований. В итоге некоторые из них мы не поддержали (в основном, потому что они не понадобились), а некоторые, без которых мы не смогли работать дальше, пришлось сделать. Выбрали архитектуру, долго работали, делали минимально играбельную версию и… факап.
Получилась максимально неиграбельная версия. Игрока постоянно откатывало, тормоза, сервер зависал в середине матча. Играть в это было невозможно. Какие были причины неудач?
Причина №1 и самая важная — неопытность. Но как же так? Мы же наняли опытного человека, который должен был сделать все красиво. Да, но на самом деле мы дали ему только часть работы. Мы сказали: «Вот тебе гейм-сервер, работай над ним». А в нашей архитектуре (об этом чуть позже) очень важную роль играет клиент. И именно эту часть мы отдали человеку, у которого не было нужного опыта. Нет, он хороший программист, сеньор — просто не было опыта. Т.е. он даже не представлял, какие там могут быть грабли.
Причина №2 — нереальные аллокации. 80 Кбайт/кадр. Много это или нет? Если учесть, что у нас 30 кадров в секунду, то за секунду мы получаем 2,5 Мбайт, а за 5-минутный матч уже больше 600 Мбайт. Короче, много. Garbage collector начинает усиленно пытаться всю эту память освободить (когда мы требуем от него больше и больше), что приводит к спайкам. Учитывая, что мы хотели 30 кадров в секунду, эти спайки нам мешали очень сильно. Причем, как на клиенте, так и на сервере.
Основная причина аллокаций заключалась в том, что мы постоянно аллоцировали массивы данных. Каждый раз практически на каждый кадр. Использовали LINQ, лямбда-выражения и Photon. Photon — это сетевая библиотека, с которой мы знакомы и используем в War Robots. И вроде все хорошо, но она аллоцирует память каждый раз, когда посылает данные или принимает их.
Если с первыми проблемами мы разобрались (переписали на свои кастомные коллекции, сделали кэширование), то с Photon практически ничего нельзя было сделать, потому что это сторонняя библиотека. Можно было только уменьшить размер пакета, а он у нас был 5 Кбайт. Много? Да. Есть MTU — это минимальный фактический размер пакета, который посылается по UDP, не разбивая пакет на мелкие части. Он, примерно, 1,5 Кбайт, а у нас было 5 (это в среднем, было и больше).
Соответственно, Photon резал наш пакет на мелкие и отправлял каждый кусок как reliable, т.е. с гарантированной доставкой. Каждый раз, когда часть не доходила, он посылал ее еще и еще раз. Мы получали еще большую задержку и сеть работала плохо.
Все эти аллокации приводили к тому, что мы получали кадр около 100 миллисекунд, когда нужно было 33. А там же рендеринг, симуляция и другие действия — всё это занимает CPU. Все эти проблемы — комплексные, т.е. нельзя решить было какую-то одну, и все станет хорошо. Нужно было решить их все сразу.
И еще небольшая проблема, которая была во время разработки — большое количество репозиториев. На слайде написано 5, но, мне кажется, их было даже больше. Все эти репозитории (для клиента, гейм-сервера, общего кода, настройки и еще чего-то) подключались сабмодулями в два основных репозитория на клиент и гейм-сервер. С этим было тяжело работать. Программисты умеют работать с Git, SVN, но есть еще художники, дизайнеры и т.д. Думаю, многие пытались научить художника или дизайнера работать с системой контроля версий. Это реально тяжело, поэтому если ваш дизайнер умеет это делать — берегите его, он ценный сотрудник. В нашем случае психанули даже программисты, и в итоге мы сократили всё до одного репозитория.
Это стало отличным решением проблемы. У нас там лежит папка с сервером и папка с клиентом. Сервер состоит из проекта гейм-сервера, генератора кода и вспомогательных инструментов.
Клиент — это Unity-клиент и общий код. Общий код — это структура данных о мире, т.е. Entities, компоненты и симуляция системы. Этот код, в основном, создается серверным генератором. Его же использует сервер. Т.е. это общая часть для клиента и сервера.
Лайфках. Берем TeamCity, натравливаем на наш репозиторий, собираем и деплоим сервер. Каждый раз, когда клиент меняет общую логику, у нас тут же собирается гейм-сервер — теперь для этого не нужен серверный программист. Обычно есть сервер, клиент и какая-то фича. Клиент ее пилит у себя, сервер у себя, и когда-то у них это все заработает. В нашем случае не так — клиент может писать эту фичу и все работает на сервере.
Матч состоит из общей части (обозначена как ECS) и представления (это юнитивые MonoBehaviour классы, GameObject’ы, модельки, эффекты — все, чем представлен мир). Они не связаны.
Между ними есть Presenters, который работает с обеими частями. Как вы понимаете, это MVP (Model-View-Presenter) и любую из этих частей можно заменить, если понадобится. Есть еще часть, которая работает с сетью (на слайде — Network). Это сериализация информации о мире, сериализация ввода, отправка на сервер, получение сервером, коннект к серверу и т.д.
Еще лайфках. Берем и заменяем эту часть посылкой не реальной, по сети, а виртуальной. Создаем некий объект внутри клиента и отправляем ему сообщения. Он реализует серверную симуляцию — теперь этот объект делает все, что происходило на гейм-сервере. Остальных игроков заменяем ботами.
Готово. Мы получили игру и возможность ее тестировать без гейм-сервера. Что это значит? Это значит, что художник, сделав новый эффект, может нажать кнопку Play в редакторе, сразу же на карте попасть в матч и увидеть, как это работает. Или же дебаг для клиентских программистов того, что они написали.
Но мы пошли дальше и приделали к этому слою эмуляцию пинга задержек сети jitter (это когда пакеты в сети доходят не в том порядке, в котором были отосланы) и другие сетевые штуки. В итоге получили практически реальный матч без гейм-сервера. Работает, проверено.
Вернемся к кодогенерации.
Я уже говорил, что у нас есть кодогенератор в гейм-сервере. Есть свой domain-specific language, который на самом деле простой С# класс. В данном случае класс Health. Мы помечаем его своими атрибутами. Например, есть атрибут Component. Он говорит, что Health — это компонент в нашем мире. На основе этого атрибута генератор создаст новый C# класс, в котором будет куча вещей. Их можно написать руками, но он сгенерирует. К примеру, метод добавления компонента в Entity, метод поиска компонентов, сериализацию данных и т.д. Есть атрибут типа DontSend, который говорит, что какое-то поле по сети посылать не обязательно — он не нужен серверу или не нужен клиенту. Или же атрибут Мах, сообщающий, что у игрока максимальное значение здоровья — тысяча. Что нам это дает? Вместо поля, которое занимает 32 бита (int), мы посылаем 10 бит — в три раза меньше. Такой кодогенератор позволил нам уменьшить размер пакета с 5 Кбайт до 1.
Google Stadia хотела похоронить привычный консольный и PC-гейминг — за полтора года ей это не удалось. Но интерес к «играм в облаке» у инвесторов и крупных компаний не угас. Как и у простых игроков, ведь «железо» в дефиците и дорожает. Рассказываем, какие облачные сервисы актуальны сейчас — с ценами, доступными играми, системными требованиями.
Вначале пару слов о том, что такое облачный гейминг. Схема такая: игра запускается на удаленном сервере, а к вам на компьютер попадает видеопоток. Требования к компьютеру минимальные — чтобы декодировал видеопоток и отображал интерфейс программы, которая связывает сервер и ваш PC. А вот скорость интернета должна быть высокой, иначе получите «мыльную» картинку. Таким образом, облачный гейминг — это аренда мощного железа (развитие идеи компьютерных клубов из «нулевых»). С одной стороны — не нужно ничего скачивать и ждать, пока установится очередной патч. С другой — не удастся покопаться, к примеру, в файле конфигурации.
GFN.ru (GeForce Now)
NVIDIA развивает GeForce Now с 2013 года. В РФ он пришел в октябре 2019-го под вывеской GFN.ru. Аудиторию о новой платформе известили на «ИгроМире». За год российская версия GeForce Now привлекла 555 тыс. пользователей и обзавелась поддержкой свыше 700 игр.
Чтобы начать пользоваться сервисом, создайте учетную запись GFN.ru, скачайте приложение. Войдите в него и вбейте в поисковую строку название интересующей игры. Важный момент — вы должны ее заранее купить в Steam, Epic Store, GOG, Origin, Ubisoft Store.
В GFN.ru постоянно появляются новинки вроде Cyberpunk 2077, Assassin’s Creed: Valhalla, Watch Dogs: Legion. В некоторые можно поиграть с RTX и DLSS — взять ту же Control. Однако многих важных проектов тут нет, к примеру, GTA 5 и Minecraft.
Серверы GFN.ru на базе GeForce RTX расположены в Москве и Екатеринбурге. Сервис обещает комфортную игру в радиусе 500 км от Москвы и от Перми до Иркутска. С ростом аудитории владельцы сервиса планируют расширять серверную инфраструктуру.
Играть в GFN.ru можно не заплатив ни копейки, но при этом придется ждать в очередях, а игровая сессия ограничена 1 часом, затем нужно снова вставать в очередь. Подписка за 999 руб/мес избавляет от очередей (но не на выходных), продлевает сессию до 4 часов, позволяет играть с эффектами RTX и балует подарками от издателей в отдельных проектах, скажем, в Hyper Scape.
My.Games Cloud
Компания Mail.Ru запустила публичную «бету» My.Games Cloud в прошлом ноябре. Сервис продвигается на PC под Windows. Со временем My.Games Cloud придет на macOS, iOS, Android и в соцсеть «ВКонтакте».
Ограничений по длине сессии, в отличие от GFN.ru, нет. На бесплатном тарифе Basic вы будете лишены приоритетного доступа к серверам и сможете играть не больше 23 ч в месяц. Mail.Ru обещает в таком случае 1080p/30 fps при средних настройках. Плюс готовьтесь к рекламным вставкам. С тарифом же Ultimate (899 руб/мес) ограничения по часам и настройкам графики снимаются.
Серверы My.Games Cloud находятся в Москве и Петербурге. Поиграть без заметных проблем удастся тем, кто живет в радиусе 1500–2000 км. В течение года серверы появятся и в других городах.
My.Games Cloud пока поддерживает мало игр. Вы можете купить их в My.Games Store и добавить из Steam. За первые две недели ОБТ сервис опробовали свыше 200 тыс. человек.
Поскольку речь о тестировании, системные требования не приводим — они наверняка поменяются.
Playkey
Playkey функционирует с 2014 года. Это один из наиболее узнаваемых сервисов облачного гейминга в РФ. Доступен он и для геймеров из-за рубежа.
В числе особенностей Playkey — поддержка популярных магазинов и выход новинок в день премьеры. Серверы раскиданы по РФ (Москва, Пермь и другие города) и за границей. Есть децентрализованная сеть, где мощности предлагают компьютерные клубы и простые пользователи. Заранее выяснить на какой сервер вы попадете нельзя.
Приложение Playkey заточено под Windows и macOS. Разработка клиента для Linux, Android и iOS отложена на неопределенный срок. В скором времени сервис представит собственную рекомендательную систему, чего у конкурентов нет.
Оплата в Playkey почасовая. За 1 ч вы отдадите 80 руб. (продолжительность бесплатной демо-сессии — 20 минут). Безлимитный тариф на месяц с подпиской EA Play Pro с кучей AAA-игр стоит 2490 руб.
Google Stadia
Stadia представлена в 22 странах, но не в РФ. Google полагается на обширную сеть дата-центров и гарантирует 720p/60 fps при скорости интернета от 10 Мбит/с.
От других сервисов Stadia отличается тем, что имеет встроенный магазин, в котором порядка 140 игр. Экосистема напоминает ту, что на PC и консолях. Раньше Google планировала делать свои игры, однако недавно отказалась от рискованной затеи и закрыла подразделение Stadia Games and Entertainment.
PlayStation Now
Еще один сервис-долгожитель, под стать Playkey и GeForce Now. Увы, по-прежнему недоступен в России.
Drova.io
У Drova.io нет собственных серверов. Компьютеры сдают в аренду обычные геймеры со всей страны — не только из Москвы и Петербурга, но и из сибирских городов: Омска, Новосибирска и других.
Выбирайте сами, к какой станции подключиться. С владельцем PC легко связаться через Discord. 1 ч стоит 48 руб. (сейчас 35 руб. по акции), иногда присутствуют бесплатные минуты для пробы. 80 % от оплаты получает владелец «железа». Если опасаетесь, что аккаунт «уведут», заранее активируйте двухфакторную аутентификацию.
Loudplay
Снова российский сервис. В аренду вы получаете виртуальный PC с доступом к рабочему столу, браузеру, файловой системе и так далее.
1 час обойдется в 49 руб. Первый час — бесплатный.
Xbox Cloud Gaming
Xbox Cloud Gaming, он же xCloud. Облачный сервис от Microsoft для Android-смартфонов. Подписка на него не продается отдельно, она включена в Xbox Game Pass Ultimate. До России xCloud пока не добрел. На компьютерах под Windows 10 он появится весной.
Amazon Luna
Эксперименты с играми у Amazon складываются неудачно. Ей пришлось закрыть сетевой шутер Crucible и MOBA Breakaway, а релиз MMORPG New World постоянно сдвигается. Пожелаем Luna удачи — закрытая «бета» платформы в США (на PC) стартовала в октябре 2020 года.
Итак, GFN.ru привлекает большим выбором устройств и поддержкой «железного» гиганта NVIDIA, в активе My.Games Cloud — бесплатный тариф без ограничений по длине сессии, у Playkey — поддержка старых Windows, хорошее покрытие, почасовая оплата, у Stadia — собственный магазин, PlayStation Now открывает доступ к консольным играм на PC, козырь Drova.io — охват всей страны, Loudplay вручает в ваше полное распоряжение виртуальный компьютер, преимущество xCloud — в огромном количестве дата-центров, ну а Amazon Luna предлагает оригинальную модель дистрибуции игр. Выбор, как всегда, за вами.
За скобками обзора остались менее известные российские (MegaDrom, PlayCloud, PowerCloudGame) и зарубежные сервисы (Shadow, Vortex). Если вам интересно — напишем и об их особенностях.