ライブ コーディング

ランタイム時にゲームのバイナリを再コンパイルして、パッチを適用します。

Unreal Engine (UE) では、 Live++ を統合した ライブ コーディング をサポートしています。ライブ コーディング は、エンジンの実行中にアプリケーションの C++ コードを再ビルドし、バイナリにパッチを適用できるシステムです。この機能は、次のシナリオで使用できます。

  • Unreal Editor でアプリケーションを編集する。

  • Play In Editor (PIE) を使用してアプリケーションを実行する。

  • エディタに接続されたアプリケーションのパッケージ化されたデスクトップ ビルドを実行する。

つまり、プレイテスト セッションやエディタ自体での作業を中断することなく、C++ クラスに変更を加えて、コンパイルし、その変更が反映されるのを直ちに確認することができます。これは、ゲームプレイ コードやフロントエンドのユーザー インタラクションなど、C++ ランタイム ロジックを使用する反復開発を行ううえで大きなメリットがあります。ホット リロード システムという代替手段も引き続き使用可能ではあるものの、ライブ コーディングの方がはるかに迅速で柔軟です。

ライブ コーディングの使用方法

ライブ コーディングは、Unreal Engine のすべての新規インストール時にデフォルトで有効になっています。IDE を開くと、ライブ コーディング コンソールが自動的に起動します。ただし、非表示になっています。非表示の場合は、ライブ コーディング ビルドを開始するとこのコンソールが開きます。

The Live Coding console displays compilation status.

ライブ コーディング コンソールでは、コンパイル ステータスのアウトプット ログが提供されます。これは標準的な アウトプット ログ とは異なるもので、ライブ コーディングのビルド情報のみを表示します。

ビルドを開始するには、IDE または Unreal Engine を使用しているときに、Ctrl + Alt + F11 を押します。画面の右下にビルドのステータスを示す通知が表示されます。ビルドが実行されている間は、エディタでの作業やプロジェクトのテストを中断することなく続行できます。

The build notification appears in the lower-right of the screen you are working on.

ビルドが成功すると、コードに応じた変更が直ちに表示されます。

ライブ コーディングは、Unreal Editor が開いているとき、PIE を使用しているとき、およびネイティブのデスクトップ環境でパッケージ化されたビルドにアタッチされているときに使用できます。コンソールやモバイル デバイスで起動した場合は使用できません。

ライブ コーディングを使用して変数のデフォルト値を変更する

変数のデフォルト値を変更する場合、.cpp ファイルで実装されたコンストラクタで設定した値は、オブジェクトの既存のインスタンスでは更新されません。ただし、.h ファイルで変更すると、変更が反映されるのがわかります。

コンフィギュレーション

ライブ コーディングの設定は、[Editor Preferences (エディタの環境設定)] > [General (一般)] > [Live Coding (ライブ コーディング)] にあります。

Live Coding settings in the Editor Preferences window

ライブ コーディングの一般設定

The general settings for Live Coding determine how the system will behave when you use it

[General (一般)] 設定は、開発環境でライブ コーディングの がどのように動作するかを制御します。

設定

説明

Enable Live Coding

オンの場合、ライブ コーディングが Unreal Editor のコンパイル方式になります。オフの場合、Unreal Editor は代わりにホット リロードを使用するようにフォールバックします。

Startup

コンソールをアクティブにするか、または表示するかどうかなど、Unreal Editor の起動時の Live Coding の動作を制御します。

Enable Reinstancing

ライブ コーディングで [Object Reinstancing (オブジェクトの再インスタンス化)] を使用するかどうかを制御します。オンの場合、オブジェクトのインスタンスは、そのコードの大規模な変更を反映できるように置き換えられます。この設定をオフにすることはお勧めしません。このような変更が不安定になることがあるためです。詳細については、「ライブ コーディングでのオブジェクトの再インスタンス化」を参照してください。

Automatically Compile Newly Added C++ Classes

オンの場合、C++ クラスを追加すると、ライブ コーディングが自動的にそれらの C++ クラスをコンパイルし、アプリケーションに追加するよう求められます。

モジュール

The Modules section determines what modules will pre-load for Live Coding

[Modules (モジュール)] セクションでは、エディタまたはアプリケーションを実行するときに、ライブ コーディングにプリロードされるモジュールを指定します。これにより、これらのモジュールを反復する際のライブ コーディングのパフォーマンスがより高速になるものの、プリロードするように設定しているモジュールが多いほど、エディタやゲームの起動に時間がかかるようになります。

オプション

説明

Engine Modules

Unreal Engine のソース コードの一部であるモジュール。

Engine Plugin Modules

「Engine/Plugins」下の Engine のインストール ディレクトリ内にあるプラグインに関連付けられているモジュール。

Project Modules

現在のプロジェクトのソース コードの一部であるモジュール。これには、プライマリ モジュールと、「Source」ディレクトリに作成した追加モジュールが含まれます。

Project Plugin Modules

「(Project Name)/Plugins」下のプロジェクトのディレクトリにあるプラグインに関連付けられているモジュール。

エンジンのソース コードを積極的に反復している場合を除き、エンジンのモジュールのプリロードは避ける必要があります。

これらの一連のモジュールに加えて、[Preload Named Modules (指定モジュールをプリロード)] 配列を使用して、ロードする必要のある特定のモジュールを選択することができます。これは、大規模なプロジェクトの中でいくつかの特定のモジュールのみで作業している場合や、エンジン全体をロードすることなく特定のエンジンのモジュールをロードする必要がある場合に役立ちます。

モジュールの使用方法の詳細については、「Unreal Engine のモジュール ガイド」を参照してください。

ライブ コーディングでのオブジェクトの再インスタンス化

オブジェクトの再インスタンス化 は、アプリケーションとエディタ全体で既存のオブジェクトのインスタンスを置き換える追加システムです。つまり、ライブ コーディングを使用してコンパイルされたコードの大きな構造的な変更を、これらのオブジェクトが直ちに反映させることができます。再インスタンス化されたオブジェクトには、UCLASS、UFUNCTION、USTRUCT、UENUM、および UDELEGATE の各マクロを使用する要素、およびブループリント ノードなど、Unreal Header Tool がこれらのマクロを使用して生成するオブジェクトが含まれます。

[Object Reinstancing] は、デフォルトでは、有効になっています。[Object Reinstancing] を無効にしても、ライブ コーディングは、変数値の変更や既存の関数の小規模の変更など、コードの小さな変更を容易に処理することができます。ただし、新しい関数、新しい一連の変数、または大幅なリファクタリングなど、コードに対する大規模な変更は、オブジェクトの再インスタンス化なしでコンパイルしようとすると、予期しない動作が発生します。これは、通常、クラッシュにつながります。

ただし、[Object Reinstancing] が有効な場合、ポインタをクリーンアップするための追加手順を実行する必要があります。コードが再インスタンス化可能なオブジェクトへのポインタを保持している場合、これらのポインタを更新するか、キャッシュを無効にすることで、これらのポインタを後で再取得できるようにするためには、ReloadReinstancingCompleteDelegateReloadCompleteDelegate を使用する必要があります。

ホット リロードでは、多くの場合、再インスタンス化されたオブジェクトの不適切な逆参照が許容されますが、ライブ コーディングはエディタをシャットダウンするときにクラッシュが発生します。これは、特定のクラスのデストラクタは 1 つのバージョンしか存在できず、クリーンアップされていないオブジェクトのインスタンスが残っていると、再インスタンス化されたオブジェクトのデストラクタの古いバージョンと新しいバージョンの間でコンフリクトが発生することに起因します。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル