3

そこで、Epic が Unreal Engine 4 の新しい開発者向け機能を紹介したこのビデオを数か月前に見ました。申し訳ありませんが、ビデオを見つけることができませんでしたが、説明するために最善を尽くします。

私の注意を引いた機能の 1 つは、C++ の「オンザフライ」の変更とコンパイルです。男はエディタでゲームをプレイしている様子を示し、コード内のいくつかの変数を変更して保存すると、変更がすぐにゲームに反映されました。

だから私は疑問に思っていました...どうすればこれを達成できますか? 現在、私は2つの可能性のある方法を考えることができます.デマであり、C ++自体ではなく「cスタイル」のスクリプト言語のみであったか、共有ライブラリ(読み取り:DLL)マジックです。

これが私が自分で試してみるために作ったものです(簡略化):

for(;;)
{
    Move DLL from build directory to execution directory
    Link to DLL using LoadLibrary() / dlopen() and fetch a pointer to function "foo()" from it
    for(;;)
    {
        Call the function "foo()" found in the dll
        Check the source of the dll for changes
        If it has changed, attempt to compile
        On succesfull compile, break
    }
    Unload DLL with FreeLibrary() / dlclose()
}

今はうまくいっているようですが、他にどんな方法があるのだろうかと思わずにはいられません。この種のアプローチは、スクリプト言語を使用する場合と比較してどうなるでしょうか?

編集: https://www.youtube.com/watch?v=MOvfn1p92_8&t=10m0s

4

3 に答える 3

1

Epic のホット リロードは、ゲーム コードをコンパイルして dll/.so としてロードすることで機能し、これがエンジンによって動的にロードされます。ランタイムのリロードは、必要に応じて状態を保存および復元して、ライブラリを再コンパイルしてリロードするだけです。

代替手段があります。Runtime Compiled C++ (またはRCC++ ブログとビデオを参照) を参照するか、wiki にリストした他の代替案のいずれかを試すことができます。

Runtime Compiled C++ の作成者として、いくつかの利点があると思います。必要なコードのみをコンパイルするため、再コンパイルがはるかに高速であり、開始点を単一の exe にすることができるため、別のプロジェクトを構成する必要はありません。 dll. ただし、これを機能させるには、ある程度の学習と少しの追加コードが必要です。

于 2015-02-13T10:06:51.797 に答える