Создание онлайн игр в Unity 3d с помощью Smartfox, часть 1
Наверняка многие игроделы хотели написаю свою cms online игру, которая будет круче, ну, или, как минимум, ничуть не хуже всех существующих. В этой статье я рассмотрю создание основы: подсоединение игроков к серверу, использование UDP, подсоединение к комнате и создание комнаты + написание расширения для сервера. Так же хотел затронуть совместное перемещение по миру и синхронизация действий (в данном случае движения) между игроками, но объем статьи не позволяет. Все скрипты написаны на C#, за основу взят официальный пример Unity3D FPS Demo. Хочу отдельно выделить серию видео туториалов Hack & Slash RPG — A Unity3D Game Engine Tutorial которая несет в себе огромное количество информации для новичков о работе с Unity, скриптинге под него и о тонкостях создания rpg.
СерверПервоначально выбор стоял между Photon, Electroserver и Smartfox.
Photon не понравился тем что работает он исключительно под Windows.
У Electroserver в этом плане лучше — есть версии под Windows 64\32, Unix и Mac. API оказалось вполне удачным и удобным, но из-за того что версия 5 вышла совсем недавно — документации, туториалов и примеров по нему минимум, все относится к версии 4. Еще оттолкнуло почти полное отсутствие комьюнити, хотя возможно просто плохо искал(на официальном форуме полное затишье). Но зато доступно написание расширений не только на java, но и на AS1 — возможно для кого то это станет ключевым моментом.
В итоге остался лишь Smartfox, а именно SmartFoxServer, 2X Community Edition. Он, как и ES, доступен для Windows, Unix, Mac и у каждой версии есть 32 и 64 битные редакции. Бесплатно доступно до 100 соединений к серверу, потом относительно гибкая ценовая политика. Есть апи для Flash, Unity 3D и iPhone, документации по клиентскому и серверному апи, примеры простых соединений, чата и полноценного 3д шутера, который и стал основой для этой статьи.
Начало работСкачать Smartfox можно тут. После установки доступна панель управления по адресу localhost:8080, там же ссылка на админпанель и несколько примеров кода для Flash и Unity. Я устанавливал сервер на Windows как службу, при таком типе установки для перезапуска сервера нужно лишь перезапустить sfs2s-service службу (перезапуск необходим для подключения расширений и обновления настроек сервера).
Разбирать устройство сервера я не буду, это достойно отдельно статьи, да и все хорошо написано в документации.
Клиентская сторонаЗадачу клиента для удобства можно разбить на 2 фазы — авторизация на сервере и сама игра. Начнем с авторизации. Создайте новый проект, из пакетов необходимо выбрать Terrain Assets — для создания площади по которой будем бегать.
В окне проекта создайте папки Auth, Fonts, Scenes, Plugins. Сохраним нашу сцену в папку Scenes, назовем например Authorization. Далее нужно подключить серверный плагин — для этого идем в папку установки сервера, далее открываем Client\Unity\API, и перетаскиваем фаил SmartFox2.dll в папку Plugins нашего проекта. Для поддержки русского языка нужно подключить любой шрифт с русским языком — для этого просто перетаскиваем шрифт в папку Fonts, Unity сама отформатирует его. В папке Auth создаем папку Scripts, и в ней 2 новых c# скрипта — назовем их Authorization и SmartFoxConnection. Должна получиться такая структура:
Далее переходим к редактированию скрипта, желательно использовать Visual Studio или MonoDevelop. Сохранять файлы скриптов нужно в utf8 (для русского языка). Далее приведу листинг скрипта SmartFoxConnection, он стандартный и служит для управления соединением с сервером. Скрипт создает объект, и в объекте хранится ссылка на соединение. Так же реализовано отключение при закрытии:
// Statics for holding the connection to the SFS server end // Can then be queried from the entire game to get the connection
public class SmartFoxConnection : MonoBehaviour
* This source code was highlighted with Source Code Highlighter .
Теперь перейдем к гораздо более интересному — классу авторизации пользователя Для начала подключим все необходимые классы и зададим переменные:
public class Authorization : MonoBehaviour
* This source code was highlighted with Source Code Highlighter .
Наш GUI готов. Если сейчас запустить юнити, мы увидим следующую картину:
Теперь реализуем подключение к серверу
Для начала добавим обработчик нажатия кнопки «Соединиться»:
* This source code was highlighted with Source Code Highlighter .
Функция AddEventListeners отвечает за прием и перенаправление всех эвентов что приходят от сервера на наши обработчики. Добавим ее, и функцию которая удаляет все существующие listeners:
* This source code was highlighted with Source Code Highlighter .
Теперь необходимо лишь добавить обработчики для каждого события. Нам нужны только события авторизации и создания\входа в комнату, остальных сейчас касаться не будем
public void OnConnectionLost(BaseEvent evt)
public void OnLogin(BaseEvent evt)
public void OnLoginError(BaseEvent evt)
void OnLogout(BaseEvent evt)
public void OnUdpInit(BaseEvent evt) public void OnJoinRoom(BaseEvent evt)