Как создать многопользовательскую игру

Создаем многопользовательскую браузерную игру. Часть первая. Клиент-серверная архитектура

Как создать многопользовательскую игру

Перевод статьи «How To Build A Multiplayer Browser Game (Part 1)»

Рассказывает Алвин Лин, разработчик программного обеспечения из Нью-Йорка

В 2014 году я впервые побывал на CodeDay в Нью-Йорке. И хотя CodeDay не совсем хакатон, это было моё первое знакомство с подобными мероприятиями. Там мы с моим другом Кеннетом Ли написали многопользовательскую игру в танчики. Так как несколько моих друзей спрашивали меня о том, как я её написал, я решил описать процесс её создания.

В этом посте я вкратце опишу ход своих рассуждений и покажу, как воссоздать архитектуру, а также дам некоторые советы, если вы захотите сделать игру сами. Этот пост рассчитан на тех, кто владеет основами JavaScript и Node.js. Если вы с ними не знакомы, то есть много замечательных онлайн-ресурсов, где можно их изучить.

Прим. перев. На нашем сайте есть много познавательных материалов как по JavaScript, так и по Node.js — обязательно найдёте что-нибудь подходящее.

Бэкенд игры написан на Node.js с использованием веб-сокетов, которые позволяют серверу и клиенту общаться в режиме реального времени. Со стороны клиента игра отображается в HTML5-элементе Canvas. Для начала нам, конечно же, понадобится Node.js. В этой статье описана работа с версией 6.3.1, но вы можете использовать любую версию выше 0.12.

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

Создание проекта

Для начала установите зависимости. Создайте папку проекта, перейдите в неё и запустите следующий код:

npm initnpm install —save express socket.io

Для быстрой настройки сервера целесообразно использовать фреймворк Express, а для обработки веб-сокетов на сервере — пакет socket.io. В файл server.js поместите следующий код:

// Зависимостиvar express = require('express');var http = require('http');var path = require('path');var socketIO = require('socket.io');var app = express();var server = http.Server(app);var io = socketIO(server); app.set('port', 5000);app.use('/static', express.static(__dirname + '/static')); // Маршрутыapp.get('/', function(request, response) { response.sendFile(path.join(__dirname, 'index.html'));}); // Запуск сервераserver.listen(5000, function() { console.log('Запускаю сервер на порте 5000');});

Это довольно типичный код для сервера на связке Node.js + Express. Он устанавливает зависимости и основные маршруты сервера. Для этого демонстрационного приложения используется только один файл index.html и папка static. Создайте их в корневой папке проекта. Файл index.html довольно простой:

Ваш пользовательский интерфейс может содержать куда больше элементов, поэтому для более крупных проектов CSS-стили лучше помещать в отдельный файл. Для простоты я оставлю CSS в коде HTML. Обратите внимание, что я включил в код скрипт socket.io.js. Он автоматически заработает в рамках пакета socket.io при запуске сервера.

Теперь нужно настроить веб-сокеты на сервере. В конец файла server.js добавьте:

// Обработчик веб-сокетовio.on('connection', function(socket) {});

Пока что в игре нет никаких функций, поэтому в обработчик веб-сокетов ничего добавлять не нужно. Для тестирования допишите следующие строки в конец файла server.js:

setInterval(function() { io.sockets.emit('message', 'hi!');}, 1000);

Эта функция будет отправлять сообщение с именем message и содержимым hi всем подключенным веб-сокетам. Позже не забудьте удалить эту часть кода, так как она предназначена только для тестирования.

В папке static создайте файл с именем game.js. Вы можете написать короткую функцию для регистрации сообщений от сервера, чтобы убедиться в том, что вы их получаете. В файле static/game.js пропишите следующее:

var socket = io();socket.on('message', function(data) { console.log(data);});

Запустите сервер командой node server.js и в любом браузере перейдите по ссылке http://localhost:5000. Если вы откроете окно разработчика (нажать правую кнопку мыши → Проверить (Inspect)), то увидите, как каждую секунду приходит новое сообщение:

Как правило, socket.emit(name, data) отправляет сообщение с заданным именем и данными серверу, если запрос идет от клиента, и наоборот, если запрос идет от сервера. Для получения сообщений по конкретному имени используется следующая команда:

socket.on('name', function(data) { // аргумент data может содержать любые отправляемые данные});

С помощью socket.emit() вы можете отправить любое сообщение. Можно также передавать объекты JSON, что для нас очень удобно. Это позволяет мгновенно передавать информацию в игре от сервера к клиенту и обратно, что является основой многопользовательской игры.

Теперь пусть клиент отправляет некоторые состояния клавиатуры. Поместите следующий код в конец файла static/game.js:

var movement = { up: false, down: false, left: false, right: false}document.addEventListener('keydown', function(event) { switch (event.keyCode) { case 65: // A movement.left = true; break; case 87: // W movement.up = true; break; case 68: // D movement.right = true; break; case 83: // S movement.down = true; break; }});document.addEventListener('keyup', function(event) { switch (event.keyCode) { case 65: // A movement.left = false; break; case 87: // W movement.up = false; break; case 68: // D movement.right = false; break; case 83: // S movement.down = false; break; }});

Это стандартный код, который позволяет отслеживать нажатие клавиш W, A, S, D. После этого добавьте сообщение, которое оповестит сервер о том, что в игре появился новый участник, и создайте цикл, который будет сообщать серверу о нажатии клавиш.

socket.emit('new player');setInterval(function() { socket.emit('movement', movement);}, 1000 / 60);

Эта часть кода позволит отправлять на сервер информацию о состоянии клавиатуры клиента 60 раз в секунду. Теперь необходимо прописать эту ситуацию со стороны сервера. В конец файла server.js добавьте следующие строки:

var players = {};io.on('connection', function(socket) { socket.on('new player', function() { players[socket.id] = { x: 300, y: 300 }; }); socket.on('movement', function(data) { var player = players[socket.id] || {}; if (data.left) { player.x -= 5; } if (data.up) { player.y -= 5; } if (data.right) { player.x += 5; } if (data.down) { player.y += 5; } });});setInterval(function() { io.sockets.emit('state', players);}, 1000 / 60);

Давайте разберёмся с этим кодом. Вы будете хранить информацию о всех подключенных пользователях в виде объектов JSON. Так как у каждого подключённого к серверу сокета есть уникальный id, клавиша будет представлять собой id сокета подключённого игрока. Значение же будет другим объектом JSON, содержащим координаты x и y.

Когда сервер получит сообщение о том, что присоединился новый игрок, он добавит новый вход в объект игроков при помощи id сокета, который будет в этом сообщении. Когда сервер получит сообщение о движении, то обновит информацию об игроке, который связан с этим сокетом, если он существует.

io.sockets.emit() — это запрос, который будет отправлять сообщение и данные ВСЕМ подключённым сокетам. Сервер будет отправлять это состояние всем подключённым клиентам 60 раз в секунду.

На данном этапе клиент ещё ничего не делает с этой информацией, поэтому добавьте со стороны клиента обработчик, который будет отображать данные от сервера в Canvas.

var canvas = document.getElementById('canvas');canvas.width = 800;canvas.height = 600;var context = canvas.getContext('2d');socket.on('state', function(players) { context.clearRect(0, 0, 800, 600); context.fillStyle = 'green'; for (var id in players) { var player = players[id]; context.beginPath(); context.arc(player.x, player.y, 10, 0, 2 * Math.PI); context.fill(); }});

Этот код обращается к id Canvas (#canvas) и рисует там. Каждый раз, когда от сервера будет поступать сообщение о состоянии, данные в Canvas будут обнуляться, и на нём в виде зеленых кружков будут заново отображаться все игроки.

Теперь каждый новый игрок сможет видеть состояние всех подключенных игроков на Canvas. Запустите сервер командой node server.js и откройте в браузере два окна. При переходе по ссылке http://localhost:5000 вы должны будете увидеть нечто похожее:

Вот и всё! Если у вас возникли проблемы, посмотрите архив с исходным кодом.

Некоторые тонкости

Когда будете разрабатывать более функциональную игру, целесообразно разделить код на несколько файлов.

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

Однако в этом демо-проекте есть несколько недостатков. Обновление игры связано со слушателем сокета. Если бы я хотел повлиять на ход игры, то мог бы написать в консоли браузера следующее:

while (true) { socket.emit('movement', { left: true });}

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

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

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

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

В идеале циклы обновлений как у клиента, так и на сервере не должны зависеть от сокетов. Попытайтесь сделать так, чтобы обновления игры находились за пределами блока socket.on(). В противном случае вы можете получить много странных нелогичных действий из-за того, что обновление игры будет связано с обновлением сокета.

Кроме того, старайтесь избегать такого кода:

setInterval(function() { // код … player.x += 5; // код …}, 1000 / 60);

В этом отрезке кода обновление координаты х для игрока связано с частотой смены кадров в игре. SetInterval() не всегда гарантирует соблюдение интервала, вместо этого напишите нечто подобное:

var lastUpdateTime = (new Date()).getTime();setInterval(function() { // код … var currentTime = (new Date()).getTime(); var timeDifference = currentTime — lastUpdateTime; player.x += 5 * timeDifference; lastUpdateTime = currentTime;}, 1000 / 60);

Это не так изящно, зато обеспечит более плавную и последовательную работу. Усложните демо-проект и попробуйте сделать так, чтобы обновление осуществлялось согласно времени, а не частоте смены кадров. Если не захотите на этом останавливаться, попытайтесь создать на сервере физический движок, который будет управлять движениями игроков.

Также можно сделать так, чтобы из игры удалялись отключенные игроки. Когда сокет отключается, автоматически отправляется сообщение о разъединении. Это можно прописать так:

io.on('connection', function(socket) { // обработчик событий … socket.on('disconnect', function() { // удаляем отключившегося игрока });});

Также попытайтесь создать собственный физический движок. Это сложно, но весело. Если захотите попробовать, то рекомендую прочитать книгу «The Nature of Code», в которой есть много полезных идей.

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

Telegram-канал про новости технологий, которые влияют на каждого из нас: @your_tech

Источник: https://tproger.ru/translations/multiplayer-browser-game-1/

Создание браузерной игры. Как заработать миллион?

Как создать многопользовательскую игру

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

На самом деле создать браузерную онлайн игру может любой, у кого есть желание учиться, но не думайте, что вас ждет легкая прогулка. Даже если вы мастер на все руки (программист и дизайнер в одном флаконе), то придется потратить уйму времени. Если же вы не владеете ни кодом, ни карандашом, то затраты будут финансовыми.

Как создать браузерную игру ничего не изучая?

Ответ – никак. Для начала нужно будет выучить HTML – язык разметки, который работает в связке с каскадной таблицей стилей – CSS. Эти языки располагают текст и изображения на странице, собирая картинку из множества фрагментов.

Поскольку вы намерены сделать именно браузерную игру, то ей обязательно понадобится сайт, желательно красивый и функциональный. Поэтому не обойтись без JavaScript – самого простого способа визуализировать вашу игру на стороне геймера. Этот язык позволяет менять местами элементы страницы без ее перезагрузки.

По сути, JavaScript управляет элементами CSS и HTML в реальном времени.

Для создания браузерной игры придется выучить HTML, CSS, PHP и JavaScript, так что бессонные ночи вам гарантированы

Язык программирования PHP нужен для создания движка игры. Он используется на сервере для обработки данных, поступающих от разных геймеров. Это – ядро, которое приводит в действие все внутренние механизмы.

Я не хочу ничего учить, но у меня есть деньги

Поздравляем, вы избежали многих проблем. И тут же получили новые. Чтобы сделать браузерную игру хорошего качества (в плохую никто играть не будет) нужно иметь хорошую команду разработчиков, а хорошие спецы стоят денег. Если брать по минимуму, то вам необходимы:

  • Программист – 2 штуки
  • Дизайнер и художник – 2 штуки
  • Гейм-дизайнер – 1 штука
  • Комьюнити-менеджер – 1 штука
  • Гейм-мастер – 1 штука.

Если у вас нет личных знакомств, то придется обращаться к аутсорсингу. Обычно такие ребята трутся на биржах фрилансеров, самой популярной их которых является www.fl.ru/.

Всех необходимых работников можно найти на биржах фрилансеров

Правда, в этом случае нужно быть очень осторожным, поскольку фрилансеры привыкли регулярно срывать сроки. Как говорят опытные руководители, можно бесконечно смотреть на 3 вещи: как течет память, как горит дедлайн и как не работает фрилансер.

Во сколько обойдется разработка?

Во столько, сколько у вас есть денег. Вот здесь приведены примерные выкладки и структура расходов на создание среднестатистической браузерки. Итоговая сумма – 25 миллионов рублей. Однако не стоит пугаться этой цифры.

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

Безусловно, такие проекты, как Drakensang Online или City of Steam требуют сумм как минимум с шестью нулями, но простую табличную браузерку можно сделать за пару десятков тысяч рублей.

В конце концов, вы всегда можете обратиться к краудфандингу. Пути Кикстартера неисповедимы, взлететь там может любой проект. Главное правильно подать блюдо.

Этапы разработки

Создание браузерной игры с нуля можно разделить на несколько этапов:

1. Поиск идеи

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

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

Например, игра Ботва Онлайн была написана «по приколу» четырьмя людьми в свободное от работы время, но благодаря своему необычному сеттингу быстро стала успешным бизнес проектом.

2. Разработка сюжета

Сюжет очень важен (если конечно, вы не делаете стратегию). Если у самого воображения не хватает, наймите кого-нибудь, у кого оно есть. В крайнем случае, обратитесь к аутсорсингу и найдите толкового копирайтера, у которого уже есть опыт создания квестов.

3. Создание игры

Даже если вы выучили вдоль и поперек JavaScript и CSS, вы все еще ничего не знаете о том, как создать браузерную игру. Это примерно то же самое, как если бы вы выучили теорию плавания, ни разу не побывав в бассейне. Лучший выход в этом случае – воспользоваться самоучителем. Вот здесь можно многое узнать о разработке игр, причем не только браузерных.

Скорее всего, ваша первая браузерка будет выглядеть так. Это – легендарный Бойцовский Клуб

4. Продвижение проекта

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

Как создать браузерную игру с помощью конструктора

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

Популярный игровой конструктор Construct 2

Большой популярностью пользуется MMO Constructor – отечественный продукт, в котором можно создать все элементы полноценной браузерной RPG.

Взамен авторы требуют совсем ничего – 50% от прибыли проекта. Разобраться в конструкторе непросто, но добрые люди уже написали гайды.

Также чтобы создать браузерную игру, можно воспользоваться такими программами, как Construct Classic, Eclipse, FPS Creator.

Больше информации о конструкторах можно узнать на форуме Gcup, где тусуются все: и продвинутые геймдевы, и зеленые новички.

Так что там насчет миллиона?

Любая, даже мобильная игра должна приносить прибыль. Иначе нет никакого смысла тратить свое и чужое время. Дабы сделать свой проект финансово успешным, нужно слушать, что говорят опытные разработчики и делать то же самое:

  • Не жадничайте! Более 80% игроков вообще не платят, либо платят копейки. Однако они создают массовку, на которую подтягивается крупная рыба. Сконцентрируйтесь на ней. Остальным дайте возможность резвиться бесплатно.
  • Постарайтесь сделать так, чтобы донаторы не сильно выделялись из общей массы, иначе масса уйдет, оставив вас без донаторов и без денег. В общем, бряцайте мускулами аккуратно.
  • Лучше всего тратят деньги те, кто не хочет тратить свое время, поэтому монетизируйте наиболее рутинные операции. Не разменивайтесь по мелочам.
  • Уроки истории создания игр показывают, то онлайн-проект должен быть бесконечным. Если у геймера появится чувство, что ему нечего делать — он уйдет, а туда, где нет онлайна, новый геймер не придет никогда.

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

Полезные ссылки:

Источник: https://GameTarget.ru/articles/sozdanie-brauzernoy-igryi-kak-zarabotat-million

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

Как создать многопользовательскую игру

Узнайте, как создать собственную многопользовательскую игру на Unity с использованием библиотеки Photon Unity Networking (PUN).

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

По сравнению с этим многопользовательские игры, такие как Fortnite и PUBG, покорили мир. Эти игры, которые легко осваивать, но трудно создавать. Они становятся все более популярными среди рекордного числа людей.

Некоторые люди даже делают карьеру из этих игр в качестве стримеров Twitch, что очень трудно сделать в одиночных играх.

В этом руководстве вы узнаете, как создать собственную многопользовательскую игру на Unity с использованием библиотеки Photon Unity Networking (для краткости PUN).

В этом уроке, вы узнаете:

  • Ключевые различия между Unity Networking и PUN.
  • Как создать сцену в лобби, чтобы игроки могли присоединяться
  • Как загрузить игровую сцену и синхронизировать значения трансформации игроков.

Начнём

Прежде чем приступить к обучению, давайте рассмотрим основные различия между Unity Networking и Photon Unity Networking.

Изучение архитектуры

Движок Unity, как и PUN имеют похожие низкоуровневые API. Но архитектура, необходимая для этих библиотек, чтобы использовать эти API, является ключевым дифференцирующим фактором между ними.

Можете ознакомиться с этим видео: https://www..com/watch?v=xLECRl1eyGk

Приведенная выше диаграмма показывает, как сообщения передаются между узлами в сети в Unity и в PUN.

Unity Networking поддерживает архитектуру сервер / клиент. Все сообщения должны проходить через хост-клиент и не могут быть отправлены напрямую между узлами. Например, на основе приведенной выше схемы, сообщения передаются от клиента B к клиенту C по следующему пути: Клиент B ▸ Сервер ретрансляции ▸ Хост A Сервер ретрансляции ▸ Клиент C.

Как видите, сообщение от источника до места назначения занимает всего 4 шага. В дополнение к этому, если Хост отключается от сети, игра останавливается.

PUN имеет аналогичную архитектуру сервер / клиент, но также поддерживает одноранговую отправку сообщений. Например, на основе приведенной выше схемы сообщения передаются от клиента B к клиенту C по следующему пути: клиент B сервер ретрансляции ▸ клиент C.

Это всего 2 шага по сравнению с 4 в Unity для одной и той же передачи сообщений между двумя узлами. В дополнение к этому, PUN потенциально может полностью обойти сервер ретрансляции, и клиент B может напрямую связываться с клиентом C, тем самым уменьшая количество переходов до 1.

Исходя из этой информации, PUN быстрее, чем Unity.

Цена

Другое ключевое отличие между Unity и PUN — модель стоимость.

Unity предлагает бесплатное количество параллельных пользователей (CCU) для каждой лицензии.

  • Personal: 20 одновременных пользователей
  • Plus: 50 одновременных пользователей
  • Professional: 200 одновременных пользователей

Если вам нужно увеличить количество CCU, которые поддерживает ваша игра, вам придется заплатить за дополнительную полосу пропускания, которую вы используете. С вас будет взиматься $ 0,49 / за 1 ГБ трафика, который проходит через инфраструктуру Unity (Matchmaker и Relay Server).

Источник – https://support.unity3d.com/hc/en-us/articles/209604483-How-much-does-Unity-Multiplayer-cost-

PUN также предоставляет до 20 CCU, 8000 ежемесячных активов и 500 сообщений на номер бесплатно.

В дополнение к бесплатному плану, он предлагает очень хороший вариант однократной оплаты в размере $ 95 на 60 месяцев, который включает в себя 100 CCU, 40 000 ежемесячных активных и 500 сообщений на номер. Этот вариант отлично подходит для небольших независимых разработчиков, которые имеют ограниченный бюджет.

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

Купить или попробовать бесплатно можете по ссылке – https://www.photonengine.com/en-US/PUN/pricing

Начинаем работу

Вам потребуется Unity версии 2018.3 или более новою копию для успешной загрузки начального проекта. Если вы не установили его в своей системе, вы можете загрузить его с unity3d.com.

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

Как только вы все настроите, загрузите стартовый проект, и откройте Photon Starter с Unity.Project Overview

Посмотрите на структуру папок в окне проекта:

Вот что содержит каждая папка:

  • LogViewer: Файлы, необходимые для актива LogViewer.
  • Materials: Материалы, необходимые для этого урока.
  • Models: Модели, необходимые для этого урока.
  • Photon: Файлы, необходимые для Фотонной библиотеки
  • PhysicsMaterial: Это физические материалы, которые будут использоваться в проекте.
  • Prefabs: Готовые префабы для туториала.
  • Resources: Сборные, которые должны быть синхронизированы Photon.
  • Scenes: Главное меню игры и сцены Арены.
  • Scripts: Скрипты, необходимые для проекта.

Откройте сцену запуска из Активов / RW / Сцены.

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

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

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

Создаём аккаунт в Photon

Прежде чем приступить к созданию лобби, вам необходимо создать учетную запись на официальном сайте Photon Engine, перейдя по адресу https://dashboard.photonengine.com/en-us/account/SignUp.

  1. После успешной регистрации вы будете перенаправлены на панель управления учетной записью.
  2. На той же странице нажмите кнопку «Создать новое приложение». Введите имя для вашего приложения, например «SampleApp», и нажмите кнопку «Создать» в нижней части формы.
  3. Наконец, на странице Dashboard вы увидите окно с информацией о вашем «SampleApp». Скопируйте AppId и сохраните его где-нибудь, так как вы будете использовать его позже в учебнике для тестирования.

Примечание: Библиотека Photon Unity Networking уже присутствует в начальном проекте, который вы загрузили в начале этого учебного пособия, но вы также можете использовать ее в своих существующих проектах, загрузив пакет Unity Pack из хранилища активов.

Продолжайте работу, вернувшись в Редактор Unity, откройте Мастер PUN, выбрав Окно ▸ Фотон Unity сети ▸ Мастер PUN.

В окне PUN Wizard нажмите Setup Project и введите AppId, который вы сохранили при настройке учетной записи движка Photom в предыдущем разделе. Нажмите кнопку «Настройка проекта».

Теперь, когда у вас есть Photon, давайте приступим к созданию лобби.

Создание Лобби

Вот обзор того, что делает скрипт Launcher.cs, по порядку:

  1. Лаунчер подключается к сети Photon Network.
  2. После подключения примите два вводных значения от пользователя: имя игрока, которое он хочет использовать, и имя комнаты, которое они хотят создать или присоединиться.
  3. Если комнаты с введенным именем не существует, создайте комнату с таким именем и сделайте текущего игрока лидером лобби. Если Комната существует, игрок присоединится к Комнате.
  4. Как только оба игрока подключились к одной комнате, лидер лобби сможет загрузить сцену MainArena.

Откройте скрипт Launcher.cs в Assets / RW / Scripts.

Добавьте следующие строки кода в Launcher.cs

Источник: https://stdpub.com/unity3d/vvedenie-v-mnogopolzovatelskie-igry-s-unity-i-photon

11 доступных движков для тех, кто хочет начать создавать свои игры

Как создать многопользовательскую игру

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

instabug.com

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

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

CRYENGINE

Коммерческий кроссплатформенный 3D-движок, разработанный Crytek. Он использовался для таких игр, как Prey (2017) и Everybody’s Gone to the Rapture.

store.steampowered.com

Предназначен для разработки: 3D-игр.

Платформы: Windows.

Языки программирования: Lua.

Стоимость: Бесплатный, пока ваш проект не заработает более 5000 долларов в год, впоследствии взимается 5-процентный сбор.

Обучение: CryEngine имеет несколько бесплатных обучающих видео, которые охватывают все: от установки программы и пошаговой инструкции по созданию простой игры, похожей на Flappy Bird, до более сложных вещей, таких как сборка настраиваемой версии движка.

Сайт: https://www.cryengine.com/

Начало работы: https://www.cryengine.com/tutorials

GAMEMAKER

Кроссплатформенный коммерческий движок для 2D-игр, разработанный YoYo Games. Он использовался для таких игр, как Undertale, Hyper Light Drifter и Minit.

kanobu.ru

Для разработки: 2D-игр.

Платформы: Windows или macOS.

Языки программирования: Использует собственный язык сценариев, называемый GameMaker Language (GML), и язык визуальных сценариев, называемый Drag and Drop (DnD).

Стоимость: Бесплатная пробная версия на 30 дней, потом нужно купить лицензию за $39 в год.

Обучение: Несколько бесплатных тестовых и видеоуроков, которые охватывают основы. Есть объемные уроки про то, как создавать конкретные жанры игр, такие как пошаговые RPG, Tower Defense и фермы. Есть также ссылки на некоторые внешние сайты и сообщества, в которых есть руководства, помогающие людям начать работу с этой программой.

Сайт: https://www.yoyogames.com/gamemaker

Начало работы: https://www.yoyogames.com/learn

GDEVELOP

2D-движок с открытым исходным кодом, разработанный для удобства использования.

gdevelop-app.com

Для разработки: 2D-игр.

Платформы: Windows, macOS, Linux или браузерная версия.

Языки программирования: Нет, использует интерфейс Drag-and-drop.

Стоимость: Бесплатно.

Обучение: В вики GDevelop доступно множество руководств и учебных пособий, а также более 80 тестовых файлов о том, как создавать игры определенных жанров и вводить особые игровые функции.

Сайт: https://gdevelop-app.com/

Начало работы: http://wiki.compilgames.net/doku.php/gdevelop5/getting_started

GODOT

Игровой движок с открытым исходным кодом для создания 2D-и 3D-игр. Отличается простотой в освоении и подходит для совместной работы целой команды.

github.com

Для разработки: 2D- и 3D-игр.

Платформы: Windows, macOS и Linux.

Языки программирования: GDScript, C# и визуальный скриптинг.

Стоимость: Бесплатно.

Обучение: У Godot есть обширное пошаговое руководство по использованию их редактора, а также бесплатные текстовые руководства, охватывающие более конкретные аспекты, такие как реализация виртуальной реальности, использование скелетов для 2D-анимации и создание процедурной геометрии.

Сайт: https://godotengine.org/

Начало работы: https://docs.godotengine.org/en/stable/getting_started/step_by_step/index.html

LUMBERYARD

Коммерческий кроссплатформенный движок для 3D-игр, разработанный Amazon. Он основан на более старой версии CryEngine. Он был использован для таких игр, как Star Citizen и The Grand Tour Game.

robertsspaceindustries.com

Для разработки: 3D-игр с интеграцией Twitch и многопользовательских функций.

Платформы: Windows.

Языки программирования: Lua.

Стоимость: Бесплатно.

Обучение: Существует бесплатная серия обучающих видеороликов и видео-бесед о более специфических особенностях движка.

Сайт: https://aws.amazon.com/lumberyard/?ots=1&slotNum=0&imprToken=b4b8be61-641c-cd04-6dc&tag=theverge02-20

Начало работы: https://aws.amazon.com/lumberyard/gettingstarted/?ots=1&slotNum=1&imprToken=b4b8be61-641c-cd04-6dc&tag=theverge02-20

REN’PY

Игровой движок для создания визуальных новелл с открытым исходным кодом. Он использовался для таких игр, как Doki Doki Literature Club, Butterfly Soup и One Night, Hot Springs.

doki-doki-literature-club.fandom.com

Для разработки: Визуальных новелл.

Платформы: Windows, macOS и Linux.

Языки программирования: Язык скриптов Ren’Py и Python.

Реклама на Компьютерре

Стоимость: Бесплатно.

Обучение: Существует бесплатный текстовый гайд, как сделать простую игру в Ren’Py, и дополнительные текстовые руководства для более специфической настройки вашего проекта.

Сайт: https://www.renpy.org/

Начало работы: https://www.renpy.org/doc/html/quickstart.html

RPG MAKER

Коммерческий игровой движок, разработанный Degica. Он разработан специально для создания классических игр в стиле JRPG без необходимости уметь программировать. Он был использован для таких игр, как Corpse Party и Rakuen.

medium.com

Для разработки: Ролевых 2D-игр.

Платформы: Windows и macOS.

Языки программирования: JavaScript.

Стоимость: $79.99.

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

Сайт: https://www.rpgmakerweb.com/products/programs/rpg-maker-mv

Начало работы: https://www.rpgmakerweb.com/support/products/tutorials

TWINE

Редактор с открытым исходным кодом для интерактивных текстовых историй. Он был использован для таких игр, как Lionkiller и The Uncle Who Works For Nintendo.

Для разработки: Интерактивных текстовых квестов.

Платформы: Windows, macOS или браузерная версия.

Языки программирования: Собственный язык, но также поддерживает HTML, Javascript, и CSS.

Стоимость: Бесплатно.

Обучение: Существует руководство, которое охватывает основы их языка и предлагает несколько примеров более сложных сценариев.

Сайт: https://twinery.org/

Начало работы: https://twinery.org/wiki/start

UNITY

Кроссплатформенный коммерческий игровой движок, разработанный Unity Technologies. Он использовался для таких игр, как Untitled Goose Game, Ori and Will of the Wisps и Hollow Knight.

epicgames.com

Для разработки: 2D- и 3D-игр.

Платформы: Windows, macOS и Linux.

Языки программирования: C#.

Стоимость: Бесплатно для личного пользования предоставляется студентам и любителям, а также небольшим компаниям, которые зарабатывают менее 100 000 долларов в год. Помимо этого, существуют годовые планы, начинающиеся с 399 долларов в год или 40 долларов в месяц.

Обучение: Unity предоставляет некоторые бесплатные ресурсы, чтобы помочь новичкам начать работу с движком. Но в рамках программы Unity Learn Premium она предоставляет гораздо больше возможностей, включая курсы, учебные пособия и даже сертификаты. Unity Learn Premium в настоящее время бесплатна до 10 июня 2020 года, но обычно стоит 15 долларов в месяц.

Сайт: https://unity.com/

Начало работы: https://learn.unity.com/tutorial/create-your-first-unity-project

UNREAL

Кроссплатформенный коммерческий игровой движок, разработанный Epic Games. Он использовался для таких игр, как Fortnite, ремейка Final Fantasy VII и Octopath Traveller.

playground.ru

Для разработки: 3D-игр.

Платформы: Windows.

Языки программирования: C++ и Blueprints Visual Scripting.

Стоимость: Бесплатно, но с 5-процентным сбором от общего дохода игры, если она принесет более 3000 долларов в квартал.

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

Сайт: https://www.unrealengine.com/en-US/

Начало работы: https://docs.unrealengine.com/en-US/GettingStarted/index.html

VN MAKER

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

gamingtrend.com

Для разработки: Визуальных новелл.

Платформы: Windows, macOS и Linux.

Языки программирования: JavaScript и CoffeeScript.

Стоимость: $69.99.

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

Сайт: http://visualnovelmaker.com/

Начало работы: https://asset.visualnovelmaker.com/help/index.htm#t=Beginner_s_Guide.htm

Источник: https://www.computerra.ru/265077/eti-instrumenty-pomogut-vam-nachat-sozdavat-videoigry/

Делаем просто
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: