🆚

2DゲームのWebビルドの出力サイズ比較[Unity/Godot]

2023/01/24に公開約4,900字

前書き

両エンジンで同じようなプロジェクトを作成し、Web向けのビルドサイズを比較します。

今回比較する対象です。

エンジン ビルド方法 エンジンバージョン
Unity 2D.URP C#(IL2CPP) 2021.3.16f1
Unity 2D.Core C#(IL2CPP) 2021.3.16f1
Godot GDScript 3.5.1 (Standard Edition)
Godot C#(Mono) 3.5.1 (Mono Edition)

設定やテンプレートはほとんどデフォルトを使用しました。
ビルドサイズに関わるものは全部デフォルトです。

Windowsを使用して、どちらもWindows版のエディタを使用しています。

作ったやつ

両エンジンで、なるべく似るように作りました
3シーン(Title,Game,Result)があって、オブジェクトをクリックしたら消えて得点が増えるゲームです。
GIFなので分かりませんが、本当はBGMと、クリックしたときやゲーム終了時にSE鳴っています

使われていない機能が最適化されたら嫌なので、
大体のゲームで使われている機能を大体使いました

  • アニメーション
  • パーティクル
  • スプライト描画
  • フォント/テキスト描画
  • オーディオ
  • 当たり判定
  • デバイス入力(UnityはInputManager)
  • シーン遷移
  • タイマー
  • UI

あとは、画像や音声ファイルの容量や、我々が作ったスクリプトなどの容量になるので、
エンジンからの出力としては、大体のものが含まれているかと思います

結果

「ビルドサイズ」は、出力されたディレクトリのサイズです。
Unityでの圧縮形式はデフォルトのBrotliです。GZipだと、今回はすべて+2MB程度でした。

さっきのゲーム

エンジン ビルド方法 ビルドサイズ
Unity 2D.URP C#(IL2CPP) 14.4MB(15,193,200B)
Unity 2D.Core C#(IL2CPP) 10.8MB(11,405,509B)
Godot GDScript 20.1MB(21,159,302B)
Godot C#(Mono) 42.2MB(44,277,862B)

空のプロジェクト

作成してすぐの空のプロジェクトをそのままビルドしてみました。

エンジン ビルド方法 ビルドサイズ さっきのゲームとの比較
Unity 2D.URP C#(IL2CPP) 7.44MB(7,802,731B) -6.96MB
Unity 2D.Core C#(IL2CPP) 2.45MB(2,574,055B) -8.35MB
Godot GDScript 13.5MB(14,204,168B) -6.6MB
Godot C#(Mono) 18.4MB(19,297,361B) -23.8MB

スクリプト付き空プロジェクト

スクリプトがないと最適化されちゃうなんてことがあるかもしれないと思ったので、
各空のプロジェクトに「中央で矩形が回転するスクリプト」を追加しただけの結果です。

エンジン ビルド方法 ビルドサイズ さっきのゲームとの比較 空のプロジェクトとの比較
Unity 2D.URP C#(IL2CPP) 7.52MB(7,895,683B) -6.88MB +0.08MB
Unity 2D.Core C#(IL2CPP) 2.45MB(2,574,713B) -8.35MB +0MB
Godot GDScript 13.5MB(14,205,192B) -6.6MB +0MB
Godot C#(Mono) 35.5MB(37,326,709B) -6.7MB +17.1MB

まとめ

ほとんど同じプロジェクトでも、両者C#を使用する場合は、GodotはUnityに比べて30MB以上大きい結果となりました。
GodotはGDScriptでも10MBくらいの差がありました。

それとGodotは、GDScriptとCSharp(Mono)で、export-templateが違うので、
からのプロジェクトでも多少差がありました。

その他やってみたこと

※この項のUnityの"デフォルト設定"などは、さっきのゲームの(2D.URP)の時ことを言っています。

Unity 「Code Optimization」と「IL2CPP Code Generation」

ビルドのウィンドウにある項目です。デフォルトでは、両方速度特化になっています。
両方サイズ特化にしたら、多少小さくなりました。(14.4MB → 13.8MB)
速度パフォーマンスに問題がない場合は、どっちもサイズ特化にしても良いかもしれません

両方速度特化(デフォルト) 14.4MB(15,193,200B)
両方サイズ特化 13.8MB(14,472,036B)

Unity 「Input System」と「Input Manager」

「Player/Other Settings/Active Input Handling」設定から、どっちをまたは両方含めるかを設定できます。
Input Systemは「Both」(どちらも)が、
Input Managerは「Input Manager(Old)」が、デフォルトで選択されています。

※上のプロジェクトではOnMouseDownを使ってましたが、InputSystem対応のため仕様を少し変えていますので、他の結果とこの結果では条件は一致しません。(0.1MBは変わらなかったためMBは一致しています。)

設定 ビルドサイズ 追加条件
Input Manager (Old) 14.4MB(15,201,525B) なし
Input System Package (New) 14.9MB(15,699,628B) なし
Both 14.9MB(15,696,566B) InputSystemのみを使う
Both 14.9MB(15,705,231B) InputManagerのみを使う&EventSystemはInputSystemに置き換える
Both 14.9MB(15,704,480B) 両方使う

「InputSystemのみ→Both」や「Both(両方)→Both(InputManager)」で、
何故かサイズが減っていてこれは明らかにおかしいです。
後者に関しては#ifで区切ったいたコードを"足して"いますし、前者はInputManagerの分減って良いはず。
それと、私だけかもしれませんが、何もせずに3回連続ビルドしたら、Unityは毎回サイズが変わることに気づきました。
私のUnityでは、なにかやばいことが起きているのかもしれません…

InputManager←→InputSystemではInputManagerの方が0.5MB少ないですが、まあ気にするほどではないでしょうから、好きな方を使えば良いと思います。

Unity 「ReleaseとMaster」

プロジェクト設定の項目です。IL2CPPの設定です。
何故かMasterでは14B増えました。(誤差,Unityは毎ビルドサイズが多少変わる…)
もしかしたら、デフォルトのReleaseで十分かもしれません。

Release 14.4MB(15,193,200B)
Master 14.4MB(15,193,214B)

Unity 「.NET Standard 2.1」と「.NET Framework」

プロジェクト設定の項目です。デフォルトは.NET Standard 2.1です。
.NET Frameworkでは、500Bくらい増えました。デフォルトでいいでしょう。

.NET Standard 2.1 14.4MB(15,193,200B)
.NET Framework 14.4MB(15,193,214B)

WindowsDesktop ビルド(さっきのゲーム)

Unity(2D.URP) 83.7MB(87,849,400B)
Godot(C#) 77.8MB(81,639,048B)
Godot(GDScript) 42.9MB(45,017,440B)

Unityは'UnityPlayer.dll'(27.9MB)と'Data/Managed/'(26.0MB)のDLLが大部分で、
のこりは'Data/'内のファイルたちが大部分でした。

感想

その他が多くなりましたが、以上です。

特に、Unityは毎回ビルドがとんでもなく長いですから、何回もビルドするのは少し大変でした。
Godotは1秒もかからず一瞬で終わるので良い子でした。

そしてUnityは設定を変えても、さほどビルドサイズは変わらない感じでした。
「Build Settings」の窓に出てる、CodeOptimizationなどの設定だけで十分かと思います。(Player Settingsはいじらなくて良い)
画像やスクリプトを減らしたり小さくしたりした方が、ビルドサイズが小さくなると思いました。

Godotに関しては、ビルドのサイズを最適化の記事の通り、最適化が出来るらしいですが、
デフォルトのexport-templateにRelease用のものがあるし、工程が面倒だったので最適化は行っていません。
あと余談ですが、GodotはデフォルトでエクスポートがDebugになっていて、
今回うっかり忘れていたため、全部やり直しました。(数MBかは違った)
皆さんはどうか気をつけて。

Godot ビルドサイズ
GDScript(Debug) 24.0MB(25,229,727B)
GDScript(Release) 20.1MB(21,159,302B)
CSharpMono(Debug) 49.5MB(51,963,697B)
CSharpMono(Release) 42.2MB(44,277,862B)

関連リンク、参考

https://docs.godotengine.org/ja/stable/index.html

Discussion

ログインするとコメントできます