Unityのゲームを作っていて、ダウンロード速度が思ったほど出ないと感じること、ありませんか?
例えば以下のようなケース
■シナリオの進み具合に応じて登場するキャラクターが、衣装や装備品を身につけていて、新しいキャラクターが出てくるたびにダウンロードが発生!
■育成画面でユーザーごとに保有するカードを 種類数分表示するようになってて、スクロールするたびにダウンロードが発生!
■10連ガチャをまわして、出た内容に応じてダウンロードが発生!
通信環境が悪いと結構な頻度でユーザーに待ち時間を発生させてしまいます……
そんなUnityでも、極力シンプルにダウンロードを高速化するアセットを作りました!!
[[ Simple H2 downloader – Unity Asset Store ]]
https://assetstore.unity.com/packages/tools/network/simpleh2downloader-173745
このアセット、Unityが使っている通信機能(WWW、UnityWebRequest)を使わず、代わりに最新の通信プロトコルで実装された通信機能によってダウンロードすることで、高速化を図っています。
Unityの通信機能では、HTTPバージョン1.1(以下、HTTP1)までしか使えません。この HTTP1 では、1回の通信で同時に1つしかダウンロードできないため、複数ダウンロードを並行で行うにはそれなりのマシンパワーが必要になります。また HTTP1 自体の仕様が古く(1995年制定)、テキスト解析にも比較的高いマシンパワー使います。スマホだけでなくサーバーの負荷も高いため、みだりに並行数を増やすことはマナー違反とされています。他にも通信を開始するための準備(DNS解決、暗号方式の擦り合わせ、暗号鍵の生成)も遅いです。もちろんそれらを動かすにはそれなりに複雑な実装が必要になります。
一方、このアセットでは内部で用いる通信プロトコルとして、HTTPバージョン2(以下、HTTP2)を使っています。
こちらを使うことで、1回の通信がさらに細かく制御できるようになり並行して取得できるようになってます、しかも従来の1つ分のマシンパワーで。また マシン負荷が低く抑えられるような工夫が HTTP2 に盛り込まれており、省電力でハイパフォーマンスなダウンロードが行えるプロトコルということもあり、今回採用に至りました。
余談ですが、Webページを表示するブラウザ(ChromeやMicrosoftEdge)では、当たり前のように使われている通信プロトコルがHTTP2なのですが、Unityでも使えるようになるのは、もう数年かかりそうとのこと……
参考: [[ .NET Standard 2.1 platform support #1330 ]]
https://github.com/dotnet/standard/issues/1330#issuecomment-510495179
ということで、興味を持たれた方は、Unityアセットストアへどうぞ。
速度比較の参考動画もアップロードしてます。
[[ Simple H2 downloader – Unity Asset Store ]]
https://assetstore.unity.com/packages/tools/network/simpleh2downloader-173745