2DゲームのWebビルドの出力サイズ比較[Unity/Godot]
前書き
両エンジンで同じようなプロジェクトを作成し、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) |
関連リンク、参考
Discussion