Unreal Engine версии 4.14, вышедший относительно недавно, как всегда, имеет кучу нового функционала, и не имеет большого количества старых багов. В частности бага из версии 4.13, приводящего к тому, что при открытии редактора Widget Blueprint весь Unreal Engine Editor вылетает целиком.
К слову, зато в UE 4.14 есть баг, из-за которого редактор вылетает при открытии редактора анимаций, или редактора скелетных мешей.
В версии 4.15 поправлены все досадные баги, приводившие к вылету редактора в Linux, и добавлены такие замечательные вещи, как типы данных Set и Map в BluePrint’ах (в C++ их можно было использовать и раньше). Первые позволяют создавать набор из произвольных неповторяющихся элементов с быстрым поиском по ним, а вторые – ассоциативный массив с произвольным типом ключей и значений.
Однако, если версию 4.13 можно было без проблем скомпилировать в Debian 8 Jessie, то версии 4.14 и 4.15 для компиляции требует Clang весрии 3.9, который есть только начиная с Debian 9 Stretch, который, на момент написания этого текста, ещё не “заморожен” и является тестовым дистрибутивом.
Итак, что же нужно, чтобы собрать UE4.14 или UE4.15 в Debian Jessie:
1. Создание chroot-окружения с Debian 9 Stretch
Поскольку для сборки нужен clang 3.9, а ему, в свою очередь понадобится ещё целая куча библиотек таких версий, которых нет в Debian Jessie, лучшим вариантом была бы установка Debian Stretch. Однако, ставить новую систему, находящуюся в стадии тестирования, где наверняка что-то сломано, только для того, чтобы скомпилировать UE4.14/4.15, не хочется. Вот если бы можно было установить систему в отдельную папку, и без всяких перезагрузок получить рабочий набор библиотек от 9-го дебиана, это было бы прекрасно!
Умные люди давно придумали для этой цели инструмент debootstrap
Итак, поехали:
1.1 Установим debootstrap:
# apt-get install debootstrap |
1.2 Создадим папку, в которой будет жить наш Debian Stretch, и запомним её в bash-переменной, чтобы далее можно было не вспоминать её расположение
# export MY_CHROOT="/root/debian-testing" # mkdir $MY_CHROOT |
1.3 Запустим установку:
# debootstrap --arch amd64 stretch $MY_CHROOT |
После этого подождём пока debootstrap скачает и установит пакеты базовой системы. Какое-то время это займёт.
1.4. Пробросим внутрь папки /proc и /dev, без них Mono откажется собирать проект
# mount --bind /proc $MY_CHROOT/proc # mount --bind /dev $MY_CHROOT/dev |
1.5. Установим git, если он ещё не установлен
# apt-get install git |
2. Подключим к chroot-окружению репозиторий с Unreal Engine 4
2.1 Если репозиторий Unreal Engine ещё не склонирован, сделаем это:
Да, кстати, доступ к репозиторию Unreal Engine нужно сначала получить, если ещё не получали, для этого нужно действовать в соответствии с данной инструкцией https://www.unrealengine.com/ue4-on-github
(клонируем в домашнюю папку от имени пользователя)
$ cd ~ $ git clone git@github.com:EpicGames/UnrealEngine.git |
2.2 Теперь прокинем его внутрь будущего chroot-окружения (если у вас репозиторий в другом месте, то нужно изменить путь ~/UnrealEngine на него):
# mkdir $MY_CHROOT/opt/ue4 # mount --bind ~/UnrealEngine $MY_CHROOT/opt/ue4 |
# mkdir $MY_CHROOT/opt/ue4 |
2.3 Теперь “погружаемся” в установленное chroot-окружение:
# chroot $MY_CHROOT/ |
3. Подготовка к сборке
3.1 Находясь внутри окружения, установим пакеты, которые нам пригодятся, и создадим пользователя:
# apt-get install aptitude mc git sudo # adduser chuser |
3.2 Войдём в пользователя chuser, обновим репозиторий на всякий случай.
Если после checkout репозиторий запустит какие-то скрипты с надписью вроде “updating dependencies“, их нужно прервать (Ctrl+C), так как он попытается установить недостающий софт с помощью sudo, а у нас sudo не настроен.
# su chuser $ cd /opt/ue4 $ git pull $ get checkout release |
3.4 Выходим опять в пользователя root (не выходя из окружения chroot) и запускаем Setup.sh
$ exit # ./Setup.sh |
Данный скрипт будет устанавливать зависимости и пакеты, необходимые для компиляции UE4.
В ходе установки в какой-то момент появится сообщение:
# apt-get install mono-devel |
на чём установка прервётся.
Суть данного сообщения в том, что пакет libmono-corlib4.0-cil отсутствует в репозитории Debian Stretch (кстати он есть в Debian Jessie но там зато нет много чего ещё). При этом, указано, что есть пакет, который его заменяет – mono-devel.
3.5 Установим вручную пакет mono-devel:
# cp ./Engine/Build/BatchFiles/Linux/Setup.sh ./Engine/Build/BatchFiles/Linux/Setup.sh.bak # nano ./Engine/Build/BatchFiles/Linux/Setup.sh |
Теперь нужно открыть основной файл Setup.sh и стереть в нём упоминание о пакете libmono-corlib4.0-cil, так как даже после установки mono-devel он не оставит надежды установить именно libmono-corlib4.0-cil.
Основной файл Setup.sh лежит в репозитории UnrealEngine в папке Engine/Build/BatchFiles/Linux, и именено его вызывает файл Setup.sh, запускаемый из корня репозитория.
3.6. Итак, создадим копию и откроем оригинал:
if [[ "$VERSION_ID" < 16.04 ]]; then DEPS="mono-xbuild \ mono-dmcs \ libmono-microsoft-build-tasks-v4.0-4.0-cil \ libmono-system-data-datasetextensions4.0-cil libmono-system-web-extensions4.0-cil libmono-system-management4.0-cil libmono-system-xml-linq4.0-cil libmono-corlib4.0-cil libmono-windowsbase4.0-cil libmono-system-io-compression4.0-cil libmono-system-io-compression-filesystem4.0-cil mono-devel clang-3.5 " |
3.7 Находим в файле строчку с упоминанием libmono-corlib4.0-cil, выглядеть этот кусок будет примерно так:
# ./Setup.sh |
Безжалостно удаляем строчку с libmono-corlib4.0-cil, после чего заново запускаем Setup.sh и ждём уже до конца установки всех зависимостей.
# chroot -hR chuser /opt/ue4 # su chuser $ ./GenerateProjectFiles.sh |
Если в процессе установки появится вопрос “The following file(s) have been modified” со списком изменённых файлов, нужно отвечать “y”, кроме случаев, когда вы эти файлы меняли самостоятельно и изменения надо сохранить.
4. Компиляция
4.1 Сгенерируем файлы проектов, необходимые для компиляции UE4:
Заново установим права для пользователя chuser, войдем в него, и запустим генератор файлов для сборки:
$ make |
4.2 По окончании генерации файлов, запустим сборку:
# exit # exit |
Она может продлиться достаточно долго, хотя это зависит от мощности вашего ПК.
Когда сборка наконец закончится, останется подготовить всё для работы из вашей основной системы Debian Jessie.
5. Подготовка к работе и запуск
5.1 Выйдем из пользователя chuser и из chroot-окружения, но при этом останемся пользователем root:
# umount $MY_CHROOT/opt/ue |
5.2. Отмонтируем папку /opt/ue4 из chroot-окружения:
# chown -hR user:user /home/user/UnrealEngine |
5.3 Вернём все права на папку вашему пользователю (всё ещё предположим что его зовут user):
# exit $ cd ~/UnrealEngine/Engine/Binaries/Linux $ ./UE4Editor |
5.4 Выйдем из root, и запустим наконец редактор UE4:
#!/bin/bash cd ~/UnrealEngine/Engine/Binaries/Linux/ stdbuf -o 0 ./UE4Editor $1 | tee ~/.UE4Editor.log |
Готово! Можно работать!
6. Последний штрих
Для удобства можно создать небольшой bash-скрипт для запуска скрипт UE4Editor.sh,
содержимое у него должно быть такое:
#!/bin/bash cd ~/UnrealEngine/Engine/Binaries/Linux/ stdbuf -o 0 ./UE4Editor $1 | tee ~/.UE4Editor.log |
Этот скрипт делает 3 полезные вещи:
1) Запускает редактор передавая ему имя файла проекта, таким образом, можно назначить скрипт UE4Editor.sh на открытие файлов *.uproject, либо просто вызывать из консоли UE4Editor.sh ~/projects/MyGame/MyGame.uproject
2) Сохраняет вывод скрипта в файле ~/.UE4Editor.log что поможет, если редактор почему-то вылетает, и нужно посмотреть его предсмертные сообщения
3) Параллельно передаёт всю выдачу в консоль, что позволяет не только сохранять выдачу редактора в файл, но и видеть её в реальном времени при запуске его из терминала.
So, what do you think ?