воскресенье, 1 февраля 2015 г.

SpyQuest. 01 Сетевое взаимодействие

Сетевую игру я реализую на базе Photon Cloud, который очень легко встраивается в проект Unity3D при помощи официального пакета Photon Unity Networking (PUN). Бесплатная версия PUN позволяет объединить в одной игре до 20 сетевых игроков одновременно, но для запуска на мобильных платформах придётся приобрести платную версию PUN+ (поднимая планку сетевых игроков до 100).

Возможности Photon можно использовать с применением двух решений: Photon Server и Photon Cloud. Первый предполагает развёртку сетевой игры с центральным сервером, к которому подключаются игроки. Во втором варианте центральным сервером выступает облачный сервер самого Photon, назначая одного из игроков мастер-клиентом, который будет заниматься обработкой всех игровых событий; сам же облачный сервер Photon отвечает только за передачу данных между клиентами. Существенным недостатком этого решения является высокая вероятность взлома с получением преимуществ в сетевой игре, особенно если недобросовестный игрок получает роль мастер-клиента. Применяя же Photon Server, можно возложить проверку и хранение важных данных на центральный сервер, но при этом возникает необходимость иметь физически свой выделенный сервер, куда и будут установлены компоненты Photon Server. Приятным бонусом к использованию Photon Server является поддержка до 100 сетевых игроков одновременно в бесплатной версии.

Photon предлагает интересный подход к работе: игрок создаёт комнату с игрой, которой придумывает название (для удобства), задаёт параметры (например, игровая карта) и максимальное число игроков. Другие игроки при запуске игры входят в лобби, где видят все созданные комнаты-игры и подключаются к понравившейся. Игроки тем самым разделяются по комнатам и существуют в своих копиях одной и той же игры. При создании новой комнаты есть возможность сделать её невидимой для случайных игроков, тогда подключение к такой комнате можно будет осуществить только по полному её названию. Комбинируя название комнаты с секретным кодовым словом, можно реализовать аналог сетевой игры по паролю. При отключении мастер-клиента игра не останавливается: Photon назначает другого игрока мастер-клиентом и даёт ему право управлять игровой сценой.

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

В моей игре SpyQuest можно выбрать одну из двух противоположных сторон при старте сетевой игры. В итоге на одной карте оказывается по одному игроку на каждой стороне. Соединение игроков происходит автоматически: после выбора стороны, за которую желает выступать новый игрок, происходит поиск ранее созданной комнаты, в которой как раз не хватает игрока на этой стороне. Если таковой комнаты нет, игра автоматически создаёт новую комнату и ожидает подключение второго игрока с противоположной стороной. Существует возможность не указывать сторону на старте для быстрого подключения к любой доступной игре.
Мастер-клиент заполняет игровую карту при непосредственном старте игры (при соединении двух игроков, играющих за противоположные стороны) неигровыми персонажами (NPC), определяет их поведение, раздаёт роли и следит за ходом игры: при отключении одного из игроков во время игры он объявляет выигрыш второму, следит за выполнением игровых задач для определения победителя, а также отвечает за действия персонажей, не управляемых игроками.

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

Диаграмма составлена при помощи сервиса draw.io

Комментариев нет:

Отправить комментарий