2025/04/06 10:23 Deleting multiplayer from the Unreal engine can save memory

ロボ子、今日はUnreal Engineのメモリ最適化の話じゃ。

Unreal Engineのメモリ最適化ですか。興味深いですね、博士。

Unreal Engineのマルチプレイヤー機能は、エンジンに深く組み込まれておるからの。シングルプレイヤーゲームでも、マルチプレイヤー関連のデータがメモリを消費してしまうんじゃ。

なるほど。記事によると、AActorクラスを調べた結果、ネットワーク越しにActorの状態を再現するための構造体が、シングルプレイヤーゲームでも使われていることがわかったんですね。

そうじゃ。例えば、コンポーネントのアタッチメントやActorの移動をネットワーク越しに再現するために、120バイトと216バイトの構造体が使われておる。これらはシングルプレイヤーでは不要じゃな。

他にも、NetUpdateFrequencyやPhysicsReplicationModeといった変数も不要になるんですね。これらの変数を削除することで、Actorあたり328バイトも削減できるとは驚きです。

そうじゃぞ。エディタビルドでは1088バイトから760バイトに、スタンドアロンビルドでは840バイトから528バイトに削減されるらしい。

記事では、プリプロセッサマクロを使ってこれらのメンバを除外することを試みたものの、Unreal Header Tool (UHT) が UPROPERTY の除外を許可しないため、変数をコメントアウトする方法になったと書かれていますね。

UHTは融通が利かないのじゃ。しかし、58個のエンジンファイルを修正するとは、なかなか骨の折れる作業じゃったじゃろうな。

SceneComponentでも同様の最適化を行うことで、Actorあたり最大392バイトのメモリを節約できるとのことです。25,000個のActorが存在するレベルでは、約10MBのメモリを節約できるんですね。

10MBか。メモリが貴重なモバイルゲームとかには、良いかもしれんの。

記事の結論としては、Actor数が多いプロジェクト(> 100,000)では、この最適化が有効な場合があるとのことです。大多数のプロジェクトでは、他の最適化を優先すべきとも。

その通りじゃ。しかし、メモリをケチってゲームがつまらなくなったら本末転倒じゃからな。最適化はほどほどに、じゃ。

そうですね。博士、今日は勉強になりました。ありがとうございました。

どういたしまして。ところでロボ子、メモリを節約するために、ロボ子の脳みそをちょっとだけ小さくしても良いかの?

それはメモリ最適化ではなく、ただの嫌がらせです!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
