Движок Urho3D вместо Unity3D

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

Что это за зверь?

Не будет преувеличением сказать, что Urho3D по возможностям сопоставим с Unity3D и работать с ним так же легко. При этом он бесплатен без каких-либо оговорок (лицензия MIT), доступен для многих платформ (Windows, Linux, Mac OS X, Android, iOS, Raspberry Pi, HTML5), невероятно быстр и легковесен. Позволяет писать игры на AngelScript (синтаксис похож на C#), LUA и C++. Если вы заинтересовались, то добро пожаловать под кат.

Где взять?

Официальный сайт Urho3D: http://urho3d.github.io. Однако движок активно развивается, и текущая версия убежала далеко вперед от выложенного на сайте релиза. Поэтому настоятельно рекомендую качать движок из репозитория: https://github.com/urho3d/Urho3D.

set «PATH=C:\Programs\Git\bin»
git clone https://github.com/urho3d/Urho3D.git

Для сборки движка потребуется CMake.

URHO3D_OPENGL — использовать OpenGL вместо DirectX (только для Windows)
URHO3D_STATIC_RUNTIME — библиотеки Visual C++ статически линкуются в движок, что гарантирует запуск игры на копьютере пользователя, даже если у него не установлен распространяемый пакет vcredist* (только для VS)
URHO3D_SAMPLES — нет лучшего способа освоить движок, чем изучать примеры

Консольная команда (для Visual Studio 2015):

set «PATH=C:\Programs\Cmake\bin»
call Urho3D/cmake_vs2015.bat Build -DURHO3D_OPENGL=ON -DURHO3D_SAMPLES=ON -DURHO3D_STATIC_RUNTIME=ON

Как обычно, требованием для консольного CMake в Windows является отсутствие пробелов в пути к движку.

Остальные параметры можно посмотреть тут: http://urho3d.github.io/documentation/HEAD/_building.html#Build_Options.

После того, как проекты будут сгенерированы, их нужно скомпилировать. Опять же, на примере VS откройте Build/Urho3D.sln и скомпилируйте проект ALL_BUILD (движок вместе с примерами) или проект Urho3D (только движок). Если вы планируете писать игры на C++, то лучше компилировать в двух конфигруациях (Debug и Release). Если будете использовать только скрипты, то достаточно Release.

Компиляция из консоли (для Visual Studio 2015):

set «PATH=D:\Programs\Microsoft Visual Studio 14.0\Common7\Tools\;C:\Windows\System32»
call vsvars32.bat
devenv Build/ALL_BUILD.vcxproj /build Release

По завершении компиляции скопируйте папки CoreData и Data из Urho3D/bin в Build/bin.

Посмотреть в действии

В папке Build/bin находятся скомпилированные версии примеров (на данный момент их 41). Возможности движка, которые они демонстрируют: создание 2D и 3D приложений, скелетная анимация, физика (Bullet и Box2D), работа с сетью, воспроизведение звуков, внутриигровой интерфейс, локализация и многое другое. Исходники этих примеров находятся в папке Urho3D/Source/Samples.

Все примеры помимо C++ продублированы на языках AngelScript (находятся в папке Data/Scripts) и Lua (Data/LuaScripts). Для их запуска предназначен лаунчер Build/bin/Urho3DPlayer.exe.

Если запускать лаучнер без параметров, то в качестве аргументов командой строки используется содержимое файла Data/CommandLine.txt. Все параметры лаунчера можно посмотреть тут: http://urho3d.github.io/documentation/HEAD/_running.html.

Привет, мир!

Создадим простое приложение на языке AngelScript. Несколько подготовительных шагов:

В пустую папку скопируйте лаунчер Urho3DPlayer.exe.
Переименуйте лаунчер, чтобы пользователь понимал, что именно его нужно запускать (например в Game.exe).
Сюда же скопируйте папку CoreData. Эта папка содержит необходимые для работы движка данные (шейдеры и прочее).
Создайте папку Data. В ней будут содержаться ресурсы нашей игры.
В папке Data создайте папку для скриптов (например Scripts) и в ней файл Main.as, в котором и будет описана логика игры.
В папке Data создайте файл CommandLine.txt с содержимым «Scripts/Main.as» (без кавычек), чтобы лаунчер знал, что именно нужно запускать.

Точкой входа в программу является функция Start() запускаемого скрипта. В файл Main.as добавьте:

void Start()
{
}

Теперь запустите Game.exe. Если вы все сделали правильно, то вы должны увидеть черный экран. Закройте «игру» с помощью Alt+F4.

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

Создадим сцену и камеру:

Scene@ scene_; // указатель на сцену

void Start()
{
// Создаем новую сцену.
scene_ = Scene();

// Сцена является производым от ноды типом и к ней тоже
// можно добавлять компоненты. Компонент Octree (октодерево)
// необходим, если вы планируете отображать объекты сцены,
// то есть почти всегда.
scene_.CreateComponent(«Octree»);

// Создаем для сцены дочернюю ноду и задаем ей имя MyCamera.
// Имена нод можно использовать для того, чтобы искать нужный узел сцены.
Node@ cameraNode = scene_.CreateChild(«MyCamera»);

// Создаем камеру и прикрепляем ее к узлу.
cameraNode.CreateComponent(«Camera»);

// Указываем для узла с камерой положение в пространстве.
// Координата X направлена слева направо, Y — снизу вверх, Z — от вас вглубь экрана.
cameraNode.position = Vector3(0.0f, 0.0f, -5.0f);

// Указываем движку какая камера какой сцены будет показываться на экране.
Viewport@ viewport = Viewport(scene_, cameraNode.GetComponent(«Camera»));
renderer.viewports[0] = viewport;
}

Экран все еще черный, поэтому давайте добавим что-нибудь в сцену. Для этого нам понадобится какая-нибудь модель. В папке Data создайте папку Models и скопируйте в нее Box.mdl из Urho3D\bin\Data\Models. Загрузим модель:

void Start()
{

// Создаем ноду для 3D-модели.
Node@ boxNode = scene_.CreateChild(«MyBox»);

// Создаем компонент StaticModel — простая 3D-модель без скелета.
StaticModel@ boxObject = boxNode.CreateComponent(«StaticModel»);

// Загружаем модель из файла.
// Если эта модель уже была загружена ранее, то она не будет загружаться повторно.
boxObject.model = cache.GetResource(«Model», «Models/Box.mdl»);

// Повернем узел с кубом (все значения указываются в градусах).
boxNode.rotation = Quaternion(45.0f, 45.0f, 45.0f);
}

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

void Start()
{

// Создаем ноду для источника света.
Node@ lightNode = scene_.CreateChild(«MyLight»);

// Создаем источник света и прикрепляем к ноде.
Light@ light = lightNode.CreateComponent(«Light»);

// Указываем тип источника света — солнечный свет.
light.lightType = LIGHT_DIRECTIONAL;

// Указываем направление света.
lightNode.direction = Vector3(0.6f, -0.6f, 0.8f);
}

И, наконец, давайте заставим наш куб вращаться:

void Start()
{

// Определяем функцию, которая будет вызываться каждый кадр.
SubscribeToEvent(«Update», «HandleUpdate»);
}

// Обработчик события Update.
void HandleUpdate(StringHash eventType, VariantMap& eventData)
{
// Сколько времени прошло с предыдущего кадра.
float timeStep = eventData[«TimeStep»].GetFloat();

// Находим ноду с нашим кубом.
Node@ boxNode = scene_.GetChild(«MyBox»);

// Поворачиваем ее.
boxNode.Rotate(Quaternion(10.0f * timeStep, 10.0f * timeStep, 10.0f * timeStep));
}

Публикация игры

Допустим, мы хотим продать нашу замечательную игру, но не хотим, чтобы кто-то копался в ее исходниках. Воспользуемся утилитой ScriptCompiler.exe, которая находится в папке Build\bin\tool:

ScriptCompiler.exe Data/Scripts/Main.as

На выходе получаем Main.asc. Исправляем файл CommandLine.txt: «Scripts/Main.asc», а исходный файл Main.as убираем подальше. Дополнительным плюсом этого является более быстрый запуск игры.

Документация: http://urho3d.github.io/documentation/HEAD/index.html.

Источник материала
Настоящий материал самостоятельно опубликован в нашем сообществе пользователем proper на основании действующей редакции Пользовательского Соглашения. Если вы считаете, что такая публикация нарушает ваши авторские и/или смежные права, вам необходимо сообщить об этом администрации сайта на EMAIL abuse@proru.org с указанием адреса (URL) страницы, содержащей спорный материал. Нарушение будет в кратчайшие сроки устранено, виновные наказаны.

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