【Unity】Unity2022.3.1f1 での WebGL ビルド時間について

## 追記 (2023-12-31)
Build Setting 内の `Code Optimization` を `Shorter Build Time` にすると ビルド時間を短くできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/ab30ac3d-c720-dc88-7e0b-3dc4c2c3e4d4.png)

|Code Optimization  |3D Sample Scene   |
|---|---|
|Runtime Speed  |1365 (22分45秒)  |
|Shorter Build  |138 (2分18秒)  |

↓ の内容は、`Code Optimization` を `Runtime Speed` に設定したときのビルド時間になります。

## 初めに
Unity2022 の LTS が出たということで、早速 [Unity1Week](https://unityroom.com/unity1weeks) 用にインストールしました。
Unity2021 で消えていた `Recompile After Finished Playing` 項目が復活するなど、使いやすくなっていたと思います。
しかし、WebGL でのビルド時間に違和感がありました。Unity2022.3.1f1 で作ったプロジェクトを WebGL ビルドすると、20分ほど掛かってしまったのです。

https://twitter.com/beiyuen/status/1668285187577516032?s=20

不思議に思ったので、Unity 2021 と比較してみました。(iOS や Android など、他プラットフォームビルド時間については検証していません。)

## ビルド時間の比較
`Unity2021.3.16f1` と `Unity2022.3.1f1` でビルドしたものを比較しました。
ビルド後に表示されるログで、ビルド時間を見ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/9f2f1b51-c4a9-d10b-34b3-d23dafc9a891.png)


### テンプレートプロジェクト
UnityHub に載っているサンプルプロジェクトを、Unity2021 と Unity2022 でそれぞれ作成し、ビルド時間 (秒) を測りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/6013e9c6-ab32-59fe-dc58-cd9036538c0c.png)

|バージョン  |2DCore  |3DCore   |3D Sample Scene   |
|---|---|---|---|
|Unity2021.3.16f1  |230 (3分50秒)   |201 (3分21秒)  |497 (8分17秒)  |
|Unity2022.3.1f1  |214 (3分34秒) |173 (2分53秒)  |455 (7分35秒)  |

テンプレートプロジェクトをビルドした際は、`Unity2022.3.1f1` でビルドしたほうが早い結果になりました。

### Unity2021 のテンプレートを Unity2022 で開く

次に、 Unity2021 用に作成したテンプレートプロジェクトを、Unity2022 にアップグレードして開き、ビルドしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/e637467a-6d3d-9356-dda4-49ffb4e3746e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/790c0edb-3a04-ce6d-db8c-03323c46be6b.png)


|バージョン  |2DCore  |3DCore   |3D Sample Scene   |
|---|---|---|---|
|Unity2021.3.16f1 のまま |230 (3分50秒)   |201 (3分21秒)  | 497 (8分17秒)  |
|Unity2022.3.1f1 にアップグレード |315 (5分15秒) |255 (4分15秒)  |1365 (22分45秒)  |

旧プロジェクトをバージョンアップしてビルドすると、ビルド時間が伸びています。
特に、`3D Sample Scene テンプレートプロジェクト` のビルド時間が2倍以上になっています。

### 過去に作ったプロジェクトを Unity2022 で開く
次に、過去に作ったプロジェクトを、2つのバージョンでビルドしてみました。
Unity2022 にアップグレードさせたところ、ビルド時間が以下のようになりました。

|バージョン  |[つなげて伝言ゲーム](https://unityroom.com/games/tsunagete_dengon_game)  | [Accumulate Jump Run](https://unityroom.com/games/accumulate_jump_run)  | [カゴ詰め検定](https://unityroom.com/games/kagodume_kentei) |
|---|---|---|---|
|Unity2021.3.16f1 のまま  |391 (6分31秒)  |418 (6分58秒)  |356 (5分56秒) |
|Unity2022.3.1f1 にアップグレード  |1283 (21分23秒) |1313 (21分53秒)  |1224 (20分24秒)  |
|(追記)Unity2022.3.4f1 にアップグレード  || |1402 (23分22秒)  |


Unity2022 にアップグレードすると、全て20分以上掛かるようになってしまいました。
因みに、それぞれ3回ほどビルドしてみましたが、ビルド時間はほとんど変わりませんでした。

### Unity2022 で作ったプロジェクトを Unity2021 で開く
Unity2022 で `2D Core テンプレートプロジェクト` を作成し、そこにプログラムやアセットを少し加えたプロジェクトを、Unity 2021 で開いてビルドしました。

|バージョン  |ビルド時間 (秒)  |
|---|---|
|Unity2021.3.16f1 にダウングレード |277 (4分37秒)   |
|Unity2022.3.1f1 のまま |1130 (18分50秒) |

やはり Unity 2022 ではビルド時間が20分近くかかります。

## 遅いところ
ビルドすると、ゲージの8割くらいまではすぐに達するのですが、その後の `Linking build.js (wasm)` というメッセージが出ている個所で非常に時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246559/16062dd6-e9e4-61e4-4391-84be38f03cc8.png)




フォーラムでも言われてました。(https://forum.unity.com/threads/webgl-build-linking-build-js-wasm-takes-forever.1315203/) 
Unity2022.2.0f1 以上のバージョンだとこの現象が起こるようです。

## 原因
~~分かりません。~~

## 対策
~~Unity 2022.1 以下のバージョンにしましょう。 [Unity2021 の LTS 版(Unity2021.3.○○ のもの)](https://unity.com/ja/releases/editor/archive) が無難でしょう。~~
Build Setting 内の `Code Optimization` を `Shorter Build Time` にしましょう。


## まとめ
~~手を付けていないテンプレートプロジェクトを WebGL ビルドするだけなら、Unity2022 の方が早いですが、手を加えたプロジェクトをビルドするなら Unity2021 の方が早いです。~~

~~Unity のバージョンを 2021 から 2022 に上げて Unity1Week に参加しようとしている方は、一旦試しに WebGL ビルドをしてビルド時間を確かめておいた方が良いです。~~

~~(追記) Unity2022.3.4f1 でもまだ直っていませんでした~~

ビルド時間が遅いと感じたら、Build Setting 内の `Code Optimization` の設定を確認してみましょう。