Unity 6 “Web” プラットフォームの更新内容をまとめてみた(以前の WebGL との違い)

Unity

以前のUnityはこれまで WebGL として、ブラウザ向けのバイナリをビルドすることができ、ブラウザゲームを作ることができました。

しかし!どうやらUnity6から Web プラットフォームと名称を改め、モバイルブラウザへの正式対応になっていたようです!
いやー、知りませんでした。最近ブラウザゲームを作り始めた身としてはそれはありがたい…!ということで今回から乗り換えてみたいと思います。

Unity6 Webプラットフォーム

モバイルも正式対応!Unity 6 の Web プラットフォームを徹底解説! | Unity Learning Materials
Unity 6 では Web プラットフォーム(Web ブラウザ)のサポートが強化されています。この動画では、注目のポイントや、オススメの設定方法などについて解説します。...

とりあえずこのUnityの公式動画を見るといいと思います←
短い概要レベルの動画なのでサクッと見れますよ!

視聴が面倒な方へのまとめ

以下は、動画の内容の書き起こしになります。
ビルドのおすすめ設定だけでも見た方が良いと思います!

Webプラットフォームの名称について

  • 今まで WebGL と読んでいた機能
  • 今後色々な要素が追加されていくにあたって、混乱を避けるために Web と名称変更
  • 公式では “Web”, “Unity Web”, “Web Target” のような呼び方をしていく

モバイルブラウザへの対応

  • Unity6から正式にモバイルブラウザ対応
  • 2022以降は警告は出ていなかったものの、正式対応ではなかった
  • 必要スペック
    • iOS: safari 15以降
    • Android: Chrome 58以降
    • (5年ほど前の機種なら動く想定。古い端末だと従来通り動作が厳しい場合もある)

WebGPU対応

  • Unity6からはWebGLに加えて、WebGPUに対応
    • WebGPU
      • 2023年にリリースされた、ブラウザ上でGPUを直接制御できる次世代Web API
  • 現時点では Experimental Release だが、本格的に使える状態
  • Conmpute Shaderを始めとする高度なGPU機能へのアクセスが可能になる
    • VFX Graph, GPU Skinning, URPの機能も使用可能になる
  • 使用するにはWebGPUに対応するブラウザが必要
    • Chrome, Edge : 正式対応済み
    • Safari : デフォルトではOFFだが、設定でONに変更することが可能(iOS 18, macOS Sequoia 以降のみ対応。以前のOSでは非対応)
  • Unity 6000.1.11f1だと設定画面で選択できるようになっていた(無理やり表示させる必要なし)

非対応機能について

  • HDRPを使用できない(必要スペックを満たせていない)
  • C#スレッドが使用できない
    • WebGL時代から同じく、C#スクリプト上からは制限の問題で使用できない
    • Coroutine, Awaitableクラスは使用できるので非同期処理はこちらで

ビルドするためのコツ(おすすめ設定)

  • 動画内では4つのサービスで検証
    • Github Pages, itch.io, Unity Play, UnityRoom
  • 一般的なコツとして、ビルドサイズがなるべく小さくなるように気をつけるべき

Webプラットフォームでサイズを小さくする設定

前提として、ビルドサイズがなるべく小さくなるように気をつける必要がある。
以下の設定を変更することでビルドサイズを小さくすることができるとのこと。

1. Code Optimization (Platform Settings)
  • “Disk Size with LTO” に変更するとビルドサイズが小さくなる
    • しかし、その分ビルド時間が伸びる。気になる場合はリリースバイナリ作成時のみ変更するのもあり
2. Compression Method (PlayerSetting / Publishing Settings)
  • デフォルトでは Gzip だが、Brotli を選択することでより高い圧縮率でビルドできる
  • ただし、ビルドサーバーが Brotli に対応している必要がある
  • もし対応していないサーバーであれば、Decompression Fallback にチェックを入れて、展開コードをLoaderに内蔵することで、制約を回避できる
    • Loaderサイズが少し大きくなるが、それ以上に圧縮されるため Brotli 設定がおすすめ

コード最適化のための設定(これも合わせると効果があるかも)

3. Managed Stripping Level (PlayerSettings / Other Settings)
  • High に変更
4. IL2CPP Code Generation (PlayerSettings / Other Settings)
  • Faster (smaller) builds に変更
  • Unity 6000.1.11f1だと、おそらく Optimize for code size and build time に表記変更?
5. Target WebAssembly 2023 (PlayerSetting / Publishing Settings)
  • チェックを入れる
  • ブラウザの必要スペックが上がるが、コードサイズの削減・高速化に若干期待できる

計測結果(詳細な数値は動画内にて)

最初15MBあったプロジェクトが上記設定を全て変更することで、9MBになった(6MBの削減

  • 一番効果的だったのは、2. の Brotli 圧縮への設定変更
    • 他はコード量をいかに減らすかという設定だが、これはデータ全体への影響があるため

各サイトへのアップロードについて

ビルドサイズ削減の設定を行った上で、各サイトへのアップロードの検証を行っていました。

Github Page

  • Brotli圧縮に未対応
  • Decompression Fallback にチェックを入れて(ON)、ビルドする必要がある
  • それ以外は特に問題なし

itch.io

  • 特に調整の必要無し
  • ビルドファイルを Zipファイル に圧縮してアップロード

Unity Play

  • Unity標準の WebGL Publisher を使用するのが楽
  • Build and Publish ボタンを押すとビルドからアップロードまで自動で行ってくれる

UnityRoom

  • UnityRoomはアップロード形式が決まっているので、Brotliは使用できない
  • 以下のように設定を変更する必要がある(デフォルトに戻す)
    • Compression Method : Gzip
    • Decompression Fallback : OFF (チェックを外す)

書き起こしはここまで。詳細は動画をご覧ください。

最後に

ということで、Unity6でアップデートされた “Webプラットフォーム” についてまとめてみました。

元々、Unity2022でビルドして自作サイトにアップロードするタイミングで、ちょっと色々困り始めたタイミングだったので、自分も早速Unity6を試してみたいと思います!(色々解決するといいなぁ…)

あと、Web関連に全く明るくないんですが、GzipよりBrotliの方が良いんですかね?
圧縮率が高い = 容量が少なく済む = サーバーにいっぱいゲーム置ける!
程度の認識ですが、ゲームのプレイ体験的には影響ないのかな…?

Unity公式が勧めているくらいなのでおそらくその辺も問題ないのかな?と思いますが、もし有識者の方いましたら教えていただけると幸いです。
自分もUnity6を使っていって、Webプラットフォームについてのわかったことや気になった点があれば随時記事にしていきたいと思います。

コメント

タイトルとURLをコピーしました