Войти
ПрограммированиеСтатьиОбщее

MMO на Unreal Engine (серия статей)

Внимание! Этот документ ещё не опубликован.

Автор:

Добрый день!
Сегодня 22.05.2017 (ну вдруг забыли, может денюха у кого, а вы ещё не поздравили 8))
На всякий случай напишу: меня кличут Salamandr (aka ZZZubec).
Я буду использовать подход следующий: то что должно быть на с++, будет именно там, но чаще всего мы будем работать именно с Blueprint.
Ещё важный момент: я не претендую на точность и абсолютное понимание того что мы будем делать ))) -> Критика приветствуется.

Сегодня я хочу поговорить об MMO, уверен вас постоянно пугает это аббревиатура (ну или запугивают другие), да и вообще слово сеть в игровых движках имеет почему то странную наклонность.
Каждый второй мечтает создать киллера жанра (киллера WOW к примеру)и в 90%, нет, даже в 98% это реально выглядит довольно смешно. Но вот эти оставшиеся 2% внушают доверия и я уверен у них всё получится, они порвут этот стереотип. А те кто сейчас над ними глумиться, будут потом грызть свои ногти и думать, а чё я не сделал свою MMO.
Дык вот, а чтобы было, если бы это мог каждый второй?! Вам либо стало страшно, либо интересно, либо и то и то 8)

И так,
готовой MMO у меня нет, но я буду делать свою, а вы мне поможете. Мы возьмем за основу самый простой и лежащий на поверхности конфликт двух сторон(это так популярно в последнее время). Но по своей сути довольно добродушен, поэтому это не конфликт континентов или мифических существ, а вполне вытекающий.
1) правило гласит: идея игры должна быть на поверхности, то есть это то, о чём думал хотя бы каждый второй из вас. Ставьте в конфликт то, что реально может произойти, но не возможно сейчас (в связи отсутствии магии, каких то технических возможностей или футуристических). ИМХО (личное мнение) ставить реально-существующий конфликт, проблему, но подменять в ней слова, это довольно грубо. В это будут играть, но, тут много нюансов ))).
Есть готовый общий набросок самой игры, если в двух словах, это UFO X-COM, а для тех кто не с нами, это противостояние двух сторон: человечества (а не отдельных людишек) и внеземной цивилизации.

Это надо было повыше запихнуть, ну ладно. Основная и единственная проблема разработки игр на Unreal Engine заключается в его системных требованиях, поэтому, прежде всего идем к дядькам Epic https://www.unrealengine.com/en-US/blog, жмём Download и регистрируем свои данные. Скачав Launcher (я буду всё равно периодически писать "лаунчер", но правильно говорить ло'нчер, где букву р подавляем языком - учите правильно и сразу) запускаем его , скачиваем движок и запускаем его.
При запуске выбираем новый проект на ... Blueprints. Забавно правда, не на с++, а именно на Blueprint. Но на самом деле, это лишь формальность, и там и там будет и то и то. Просто в с++ случае классы игрока и прочие будут изначально на с++. Это всё детали которые Вам не нужны, а вам сейчас надо убедится в том что редактор вообще запустился.

Он запустился?! Ну тогда я вас поздравляю, добро пожаловать в ... наши ряды.
На текущий момент версия движка 4.15, а в ютубе чуть ли не раз в три дня появляется новое полуторачасовое видео о новых возможностях 4.16. Эпики взялись не на шутку за своё детище, а поддерживаемый и развивающийся движок это именно как раз то, что нужно программисту (это решает массу проблем с написанием нового функционала, они пишут, мы юзаем и нам не приходится писать это самому). Движок является кроссплатформенным, но сам не пробовал его использовать на других платформах, потому что меня устраивает моя операционка.

Я не буду давать готовый проект по шагам, всё что мы с вами создадим Вам придется сделать собственноручно. Выбирая объекты на сцене и нажимая кнопку Delete добейтесь того что у меня на сцене.
Unreal MMO #1 | MMO на Unreal Engine (серия статей).
Можно это сделать в скролбоксе справа (это будет конечно точнее, но тут мозг почти не участвует, а он должен работать), спойлер в помощь

+ Показать

Не важно какую игру вы хотите создать, простую SinglePlayer, Coop или же MMO. Важно постоянно держать вот это в голове, https://drive.google.com/open?id=0Bzl8pH3p1mHRMVBmVUh0dXpLVk0 (разместил у себя, своего рода сетевая-библия для нас текущих) всё конечно не уместится сразу, поэтому выделю лишь часть.
Unreal MMO #1 003 | MMO на Unreal Engine (серия статей)
Потому что лучше сразу делать по уму, как здесь. Тогда переход из "нет сети вообще" в "есть поддержка сети" или даже "есть dedicated MMO сервер", не займет много времени.
Я также попутно изучаю материал с GameSparks https://docs.gamesparks.com, материал конечно интересный, но чё то у меня пока нет желания платить даже те скромные 2$ в месяц за то что он дает (может моё мнение изменится, ну или Вы меня подтолкнете к тому чтобы я показал интеграцию с ним, а пока просто упомяну о нём в скольз). Там есть интересные моменты, но всё это я могу реализовать и без него, благо опыт позволяет (я не говорю обо всём, не надо переоценивать мои возможности, я говорю лишь о тех вещах которые я от него ожидаю).

Начинаю уставать, а мы только начали 8)))
Давайте обрисую общую картину того что мы будем делать, это должно помочь думать со мной на одной волне. Сейчас мы будем создавать тайловую(блочную) игру, это где вся карта представляет из себя "кубики". То есть игрок пока не сможет изменять мир, а мы как админ можем (при чём это пока единственный способ его перестраивать, читайте ниже).
Второй момент, всё будет происходить на одной карте, но карта не будет представлять из себя монолит. Карта будет кусковой (я бы конечно объяснил почему я выбрал именно этот вариант, но я оставлю это для вашего мозга, пусть думает, размышляет). По сути получается как бы несколько карт, где есть переходы между локациями. Общая карта получается вроде как из нашего мира, где есть материки, а вода (океаны, моря и озёра) - это не проходимые куски карты, а скорее беспроглядная бездна.
Представили? гуд (да, я немецкий в школе учил, но английским владею лучше).
Это позволит нам любую часть мира подгрузить или выгрузить в любой момент. Удобство очевидное, есть и минус такого подхода, к примеру мы не можем всю карту сразу видеть в редакторе (без подключения к серверу) но мы его обойдем в дальнейшем.

Разговоры, разговоры... приступаем к непосредственной реализации.

У меня есть проекты, где часть функционала я буду брать от туда, не вижу смысла писать дважды одно и тоже. Проще подогнать под нужды, если что не так.
Весь контент буду либо брать из открытых источников, либо создавать сам. Важно понимать, что открытые источники вовсе не позволяют вам использовать их для создания игр (обычно либо не дают коммерческое использование, но бывает и так, что дают лишь как бы на время, для прототипа. Чтобы потом показать проект инвестору, нанять нормального моделера и заменить модель), тут обязательно надо читать их лицензию. Так что буду давать линк на оригинал, а там читайте сами.

1) Нам надо создать общий класс карты, которая будет:
а) загружать карту
б) строить карту (из блоков)
в) в моей карте уже реализовано чтение блоков из редактора, это сделано для того чтобы мы могли прямо в редакторе строить свои карты
г) сохранять карту

2) Cоответственно нам нужен класс блока, где его ID, будет говорить о том, какой блок. То есть блок в зависимости от своего ID, будет подгружать Static Mesh прямо в конструкторе.

3) Для отображения карты, нам потребуется класс HUD. Это типо виджета который постоянно висит на переднем плане (перед глазами) и если там ничего нет, то мы его по сути и не видим.
Карта блочная, то есть мы можем это реализовать через камеру, которая будет рисовать то что видит в текстуру, а мы её отображать, но в данном случае я покажу более интересный способ для "таких" (блочных) видов карт.

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

На этом, думаю прервусь, ну и почитаю ваши комментарии. А надо ли вам вообще это? 8))) шучу, шучу. Надо конечно.
Разогрел я Вас, да?
Буду рад слышать Ваше мнение. А пока пойду сделаю то что здесь описал, продолжим завтра(23.05.2017) или ближе к вечеру.

С уважением, Иван! ;)

Вторая часть

#MMO, #Unreal

22 мая 2017 (Обновление: 27 мая 2020)

Комментарии [4]