Unreal Engine ze źródeł

Prędzej czy później docieramy do momentu, gdy potrzebujemy coś więcej (albo inaczej) niż standardowy Unreal Engine z Lauchera Epica. Czyli Unreal Engine ze źródeł, którym straszy się juniorów siedzących w Blueprintach.

Jak najprościej zainstalować i skompilować Unreal Engine pod Windows (pod MacOS nie jest jakoś strasznie, ale to inna historia)?

Zakładam, że macie klucz SSH podpięty do Githuba i Git jest już zainstalowany, bo wcześniej było czytane GIT na służbie.

No to jedziemy, na początku – instalujemy VS Community, powiedzmy 2019. Poniżej screen typowych ustawień komponentów jakie używam.

Typowy błąd instalującego to niedoinstalowywanie .NET, które jest potrzebne.

W zakładce Individual components mam zaznaczone/zainstalowane:

Generalnie – możecie albo od razu instalując dodać te wszystkie komponenty, albo zmodyfikować instalację po tej podstawowej z pierwszego ekranu czyli workloadów.

Junior wrócił z problemem, na szczęście drobnym – “Visual Studio 2022 ma trochę inny ekran i czy to na pewno ma być tak”. Ma być tak jak poniżej 🙂

Dla zbalansowania głupich pytań “a gdzie to jest w polskim instalatorze” powyższe screeny. Przy okazji oblecieliśmy i VS2019 i VS2022. Ufff.

Mamy środowisko, więc teraz możemy zająć się już samym Unreal Enginem. Robimy sobie na dysku katalog Source. Weźcie poprawkę, że ta instalacja zje ponad 200GB. Nie musi być na dysku C 😀

No to jedziemy: odpalamy np. PowerShella (masz go razem z instalką Visual Studio) i wpisujemy

git clone git@github.com:EpicGames/UnrealEngine.git

może być tak, że zostaniemy poproszeni o wpisanie hasła – tego od klucza SSH, które dodaliśmy do Githuba, może być tak, że jeżeli nie zrobiliście tego wcześniej to to jest ten moment w którym wracacie do GIT na służbie i robicie to hasło, które dodajecie sobie do profilu na github.com 🙂

O, a to przykład jak junior bez gita chciał klonować repozytorium 🙂

Drobna dodatkowa uwaga – jeżeli mając otwartego PowerShella zaktualizujecie sobie VisualStudio i doinstalujecie git’a to się nie liczy 😀 Musicie zamknąć PowerShella, dopiero po jego ponownym uruchomieniu komenda git będzie Wam działać. Tak wiem, to niesportowe 😉

Tym czasem junior dalej ma problemy:

Bo to jest tak: myślimy, że jak w domu ktoś nam wytłumaczył, zrobiliśmy sobie klucz SHA, dodaliśmy do githuba i działa, to potem w pracy wklejamy komendę i… nie działa. Dlaczego nie działa? Bo klucz zostawiliśmy w domu 😀

A tak na poważnie – klucz SHA dodaliśmy sobie w kompie domowym (zgaduję – bo to u juniora), a potem próbujemy użyć czegoś, czego nie mamy na innym kompie, w innym miejscu.

Kolejna drama juniora – zrobił klucz i nie może go dodać do ustawień profilu na githubie. Nosz k…a – czemu mu nie działa nie wiedziałem dość długo, w końcu postanowiłem obejść wszystkie błędy poprzez taką metodę:

  1. klucz zapisuje się w ukrytym podkatalogu .ssh naszego katalogu użytkownika (o ile nic nie namieszaliśmy). Junior to zrobił prawidłowo. W katalogu są dwa pliki – interesuje nas ten z rozszerzeniem .pub.
  2. nie chcę już wnikać dlaczego na PowerShellu juniorowi nie zadziałało, ale CommandPrompt przyszedł z pomocą – na nim działa ta komenda.
  3. wchodzimy w podkatalog .ssh komendą
cd .ssh

Kopiujemy do schowca zawartość pliku z rozszerzeniem .pub:

clip < .\id_ed25519.pub

Oczywiście, że nie trzeba było wchodzić w podkatalog .ssh, można było dopisać dłuższą ścieżkę, ale serio – zdalne instruowanie kogoś za firewallem – w pewnym momencie robisz to tak, żeby na 100% zadziałało, bo czas ucieka i rośnie histeria po drugiej stronie.

4. Wklejamy to (paste) w odpowiednim okienku i ma zadziałać!

Juniorowi to w końcu zadziałało, więc bądźcie jak junior 🙂

W każdym razie po komendzie

git clone git@github.com:EpicGames/UnrealEngine.git

…jeżeli wszystko jest ok, to zobaczycie w logu:

Cloning into 'UnrealEngine'…
Enter passphrase for key '/c/Users/Marcin/.ssh/id_ed25519':
remote: Enumerating objects: 4644820, done.
remote: Counting objects: 100% (33/33), done.
remote: Compressing objects: 100% (25/25), done.
remote: Total 4644820 (delta 10), reused 28 (delta 7), pack-reused 4644787Receiving objects: 100% (4644820/4644820), 20.Receiving objects: 100% (4644820/4644820), 20.09 GiB | 15.13 MiB/s, done.
Resolving deltas: 100% (3068262/3068262), done.
Updating files: 100% (141847/141847), done.

Czyli wszystko z pierwszego kroku mamy zrobione – mamy sklonowane repo Unreal Engine z oficjalnego repozytorium Epic’a – teraz wchodzimy w podkatalog Unreal Engine:

cd UnrealEngine

komendą

git tag

jesteśmy w stanie zobaczyć jakie branche są aktualnie w repozytorium (a są od 4.0.1-release do najnowszych), jeżeli już sobie coś wybraliśmy dla siebie – wystarczy, że posłużymy się komendą:

git checkout 5.0.3-release

Oczywiście zamiast 5.0.3-release wpisujecie nazwę branchu jaki Was interesuje. W efekcie zobaczycie na ekranie:

Note: switching to '5.0.3-release'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at d9d435c9c280 5.0.3 release

Mamy do wykonania kilka operacji – pierwsza z nich to uruchomienie pliku Setup.bat komendą

.\Setup.bat

powinniśmy zobaczyć na ekranie coś takiego:

Checking dependencies…
Updating dependencies: 100% (88469/88469), 21037.9/21037.9 MiB | 10.39 MiB/s, done.
Registering git hooks…
Installing prerequisites…

tutaj komputer poprosi nas o potwierdzenie w osobnym oknie. Potem wracamy do PowerShella i wpisujemy:

.\GenerateProjectFiles.bat

powinno nam się wyświetlić coś takiego:

Setting up Unreal Engine 5 project files…
Using bundled DotNet SDK
Building UnrealBuildTool…
Log file: C:\source\UnrealEngine\Engine\Programs\UnrealBuildTool\Log_GPF.txt
Some Platforms were skipped due to invalid SDK setup: Mac, IOS, Linux, LinuxArm64, TVOS.
See the log file for detailed information
Binding IntelliSense data… 100%
Writing project files… 100%

Czas otworzyć z folderu Unreal Engine plik solucji Visual Studio UE5.sln.

Oczywiście junior trafił znowu na problem:

I tak, trzeba zaktualizować. A potem kontynuujemy otwieranie projektu.

Po jego otwarciu zmieniamy konfigurację solucji na Development Editor, sprawdzamy czy platformą solucji jest Win64 i podświetlamy w oknie solucji folder UE5 jak na poniższym screenie:

a po kliknięciu prawym przyciskiem myszy pokaże się poniższe menu kontekstowe, z którego wybieramy pierwszą pozycję czyli Build.

W oknie Output Visual Studio pojawi nam się dłuuuuugi log kompilacji modułów silnika (w przypadku branchu 5.0.3-release jest to 5914 + jeszcze paredziesiąt wstępnych). Można teraz kawkę albo piwko, bo zasłużyliśmy, a mamy wolne circa 10-30 minut w zależności od wybranego branchu silnika i szybkości naszego kompa. Z dobrych wieści – jeżeli wszystko pójdzie dobrze, to prawie finisz.

U mnie wynik:

4>[5913/5914] WriteMetadata UnrealEditor.version
4>[5914/5914] WriteMetadata UnrealEditor.target
4>Total time in Parallel executor: 6403.65 seconds
4>Total execution time: 6587.78 seconds
========== Build: 4 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Mam nadzieję, że u Was też. To co teraz:

Albo otwieracie edytor, który przed chwilą osobiście skompilowaliście – a znajdziecie go w katalogu:

source/UnrealEngine/Engine/Binaries/Win64/UnrealEditor.exe

albo otwieracie solucję projektu C++ w Visual Studio i klawiszem F5 uruchamiacie go w DevelopmentEditor środowiska – wtedy otworzy się… ten sam Unreal Editor.

Dlaczego instaluję tą metodą a nie z Github Desktop i klikając tylko w pliki .bat? Skoro tutaj dotarliście, bo znaczy, że nie zawsze metoda okienkowa, uproszczona do wizualności okienek działa. A ta powyższa – działa zawsze.

Po co nam wersja kompilowana? Można ją lepiej dostosować pod nasz projekt, albo specyficzną platformę (np. Oculus/Meta Quest). Można poprawić rzeczy, których Epic i jego dev team jeszcze nie poprawili. Oczywiście, jeżeli robicie projekt w Blueprintach to kompilowanie silnika pod to ma średni sens. Dodatkowo – jeżeli zobaczycie teraz na projekty w Library Epic Launchera to te pochodzące z silnika skompilowanego ze źródeł mają popsute numeracje wersji. Można się zestresować 🙂

https://docs.unrealengine.com/5.0/en-US/downloading-unreal-engine-source-code/

https://github.com/EpicGames/UnrealEngine