今年もGDC 2019が開催されて、UE4も様々な新情報が出ています。
既に多くの情報はニュースにまとまっているので、大きなニュースはそちらに任せるとします。
また本家動画が既にYouTubeに上がっているので紹介しておきます。
この中で開発者の方が気になりそうな新しいトピックがあったので紹介しておきます。
コンパイル時間の高速化
今回の発表の中でコンパイル時間の高速化が取り上げてられていました。
この情報は既にロードマップのTrello内にも掲載されています。
UnrealBuildToolとUnrealHeaderToolを高速化し、C++のイテレーション時間をより短くするものです。最大でフルコンパイルが30%、インクリメンタルビルド(差分)が350%も早くなるとか。
普段からC++でコードを書いている人にはこれだけで十分良いニュースでしょう。
しかし、この後にLive++という聞いたことがないものが出てきたので今回はこれに着目します。
Live++について
Live++とはなんなのかというと、C++用のホットリロード&ライブコーディング支援用のミドルウェアです。
しかしUE4には既にホットリロードという機能が存在しており、今回のLive++はどう違うの?ということで色々調べてみました。
以下はLive++開発者のStefan Reinalterさんのツイートから引用します。
@molecularmusing How is that faster than Unreal Hot reload ? It also handles individual translation units.
— OeilDeLance (@ErwanBancal) February 28, 2018
Stefan Reinalterさんへの質問 : それはどのようにアンリアルのホットリロードよりも速いのですか?個々の翻訳単位でも扱えるのか。
No, UE4 works with DLLs: https://t.co/dDAkMF778J It will compile (and link!) the whole DLL, serialize state, unload the DLL, load the new DLL, serialize state back.
— Stefan Reinalter (@molecularmusing) February 28, 2018
Stefanさん : いいえ、UE4はDLLで動作します。これはDLL全体をコンパイル(およびリンク!)し、状態をシリアライズし、DLLをアンロードし、新しいDLLをロードし、シリアライズされたものを返します。
Live++ compiles the changed .cpps, loads the new code, and links it against existing symbols (data & code) at runtime. No need to rebuild the whole DLL and serialize everything.
— Stefan Reinalter (@molecularmusing) February 28, 2018
Stefanさん : Live++は、変更された.cppたちをコンパイルし、新しいコードをロードして、実行時に既存のシンボル(データとコード)に対してリンクします。DLL全体を再構築して全てをシリアル化する必要はありません。
Quick test with the default UE4 FPS template: simple change in MyProjectCharacter.cpp. UE4 hot-reload: 25.7s, only works when not currently playing. Live++: 2s, always works.
— Stefan Reinalter (@molecularmusing) February 28, 2018
Stefanさん : デフォルトのUE4 FPSテンプレートを使用したクイックテスト。MyProjectCharacter.cppの簡単な変更。UE4 ホットリロード : 25.7秒、現在プレイしない時のみに機能します。Live++ : 2秒、常に機能します。
Game running in UE4, change to MyProjectCharacter.cpp - takes 3s in this case.
— Stefan Reinalter (@molecularmusing) February 28, 2018
Best I got using UE4 hot-reload was 23s. pic.twitter.com/FWIpzCbmG7
Stefanさん : UE4で実行中のゲーム、MyProjectCharacter.cppへの変更 - この場合は3秒かかります。UE4のホットリロードを利用した時の最良の結果は23秒でした。
と、いう具合にどうやら10倍近くのコンパイル時間に差が出るようで、相当速いです。また現在のUE4ではPIE時にコンパイルが出来ないようになっているため、PIEだろうとなんだろうと、いつでもコンパイル後にリロードできるようになっています。
説明をみる限りでは、DLL全体を再構築しないようなので、必要なコードのみをコンパイルして実行時にリンクされるので、既存のUE4よりもかなり速くコンパイルを終わらせる事が可能です。つよい。
Live++の利用方法
Live++を利用するためにはエディタの環境設定を変更後に再起動が必要です。
"Enable Live Coding"にチェックをつけましょう。再起動後からLive++が利用可能となります。
起動するとこのような専用のコンソールが出現します。ツールバーのコンパイルからでもリロードできますが、ショートカットとして、Ctrl+Alt+F11でもホットリロード可能です。
#UE4.22からインテグレートされるLive++によるホットリロード&ライブコーディング機能の検証動画。#UE4Study pic.twitter.com/gXwaCCKoZR
— alwei (@aizen76) March 24, 2019
思ったよりも時間がかかっている気がしますが、とりあえず問題なく使えています。DLLのリロードよりも必要なシンボルとのリンクらしいので既存のものよりも更に安定しているかもしれません。
4.22ではまだExperimental(実験的機能)ですが、使えそうならガンガン使っていきたいところです。