Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 Live++による高速ライブコーディングについて

今年もGDC 2019が開催されて、UE4も様々な新情報が出ています。
既に多くの情報はニュースにまとまっているので、大きなニュースはそちらに任せるとします。

www.famitsu.com

また本家動画が既にYouTubeに上がっているので紹介しておきます。

www.youtube.com


この中で開発者の方が気になりそうな新しいトピックがあったので紹介しておきます。

コンパイル時間の高速化

今回の発表の中でコンパイル時間の高速化が取り上げてられていました。

f:id:alwei:20190324154146p:plain

この情報は既にロードマップのTrello内にも掲載されています。

trello.com

UnrealBuildToolとUnrealHeaderToolを高速化し、C++イテレーション時間をより短くするものです。最大でフルコンパイルが30%、インクリメンタルビルド(差分)が350%も早くなるとか。

普段からC++でコードを書いている人にはこれだけで十分良いニュースでしょう。

しかし、この後にLive++という聞いたことがないものが出てきたので今回はこれに着目します。

f:id:alwei:20190324155145p:plain

Live++は4.22からエンジンコアにインテグレートされ、UE4デベロッパーなら誰でも無料で利用可能だそうです。

Live++について

Live++とはなんなのかというと、C++用のホットリロード&ライブコーディング支援用のミドルウェアです。

molecular-matters.com

しかしUE4には既にホットリロードという機能が存在しており、今回のLive++はどう違うの?ということで色々調べてみました。

以下はLive++開発者のStefan Reinalterさんのツイートから引用します。

Stefan Reinalterさんへの質問 : それはどのようにアンリアルのホットリロードよりも速いのですか?個々の翻訳単位でも扱えるのか。

Stefanさん : いいえ、UE4はDLLで動作します。これはDLL全体をコンパイル(およびリンク!)し、状態をシリアライズし、DLLをアンロードし、新しいDLLをロードし、シリアライズされたものを返します。

Stefanさん : Live++は、変更された.cppたちをコンパイルし、新しいコードをロードして、実行時に既存のシンボル(データとコード)に対してリンクします。DLL全体を再構築して全てをシリアル化する必要はありません。

Stefanさん : デフォルトのUE4 FPSテンプレートを使用したクイックテスト。MyProjectCharacter.cppの簡単な変更。UE4 ホットリロード : 25.7秒、現在プレイしない時のみに機能します。Live++ : 2秒、常に機能します。

Stefanさん : UE4で実行中のゲーム、MyProjectCharacter.cppへの変更 - この場合は3秒かかります。UE4のホットリロードを利用した時の最良の結果は23秒でした。

と、いう具合にどうやら10倍近くのコンパイル時間に差が出るようで、相当速いです。また現在のUE4ではPIE時にコンパイルが出来ないようになっているため、PIEだろうとなんだろうと、いつでもコンパイル後にリロードできるようになっています。

説明をみる限りでは、DLL全体を再構築しないようなので、必要なコードのみをコンパイルして実行時にリンクされるので、既存のUE4よりもかなり速くコンパイルを終わらせる事が可能です。つよい。

Live++の利用方法

Live++を利用するためにはエディタの環境設定を変更後に再起動が必要です。

f:id:alwei:20190324162852p:plain

"Enable Live Coding"にチェックをつけましょう。再起動後からLive++が利用可能となります。

f:id:alwei:20190324163336p:plain

起動するとこのような専用のコンソールが出現します。ツールバーコンパイルからでもリロードできますが、ショートカットとして、Ctrl+Alt+F11でもホットリロード可能です。

思ったよりも時間がかかっている気がしますが、とりあえず問題なく使えています。DLLのリロードよりも必要なシンボルとのリンクらしいので既存のものよりも更に安定しているかもしれません。

4.22ではまだExperimental(実験的機能)ですが、使えそうならガンガン使っていきたいところです。