simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity:HTTP通信のベストプラクティス

前書き

ちょうどこのブログを閲覧しているみなさんは、HTTP と呼ばれるプロトコルを介して私の文章とやり取りをしています。
皆さんは HTTP についてどれくらいご存知でしょうか?

インターネットには、目的地へ電気信号を届ける決まりごとがあります。(何でも規格化しておかないと、共通の機材で通信できませんからね…)
例を示すと、ある IPアドレスのマシンに情報を届けて、その情報に書かれているポート番号のアプリに情報を届けて、アプリで情報を処理してプロパティを参照して…と、層ごとにとにかく情報を渡すという仕組みです。
下位層で仕事の内容を変えたとしても、上位層で得られる情報に変化がなければ、そこから上の層の処理は変わりようがありません。
情報には決まってヘッダ部とボディ部があって、どの層もヘッダ情報を頼りに情報伝達の仕事をします。
これがOSI参照モデルと呼ばれる考え方です。

層ごとに情報を処理する決まりごとを~プロトコルと呼びまして、HTTP (ハイパー・テキスト・トランスファープロトコル)は長いこと下位層として TCPトランスミッション・コントロールプロトコル)を利用してきました。
しかし、最近はセキュリティの観点から認証・暗号化・改竄防止のため、TCP の上に TLS(トランスポート・レイヤー・セキュリティ・プロトコル)を差し込んで、TLS の上で HTTP を利用する HTTPS 通信と呼ばれる通信が主流となっています(いまだ http://~から始まる保護されていない通信のブログや個人サイトも多いけど…)

そして Unity から HTTP や HTTPS でのデータのやり取りを行う場合は、どういった実装を書くのがベストなのでしょうか?
という疑問に答えたいと思います。(良かったら追記もよろしく)

本題

UnityWebRequest は、HTTP の完全な制御が可能です。
モバイルプラットフォーム: iOS, Android でも利用できます!
詳しくはマニュアルに記載!
docs.unity3d.com

…以上なんですが

UnityWebRequest は AssetBundle のダウンロードのための専用の機能
UnityWebRequest.GetAssetBundle
やテクスチャファイルの効果的なダウンロードのための機能
UnityWebRequest.Texture
が用意されています。

とにかく、ただダウンロードして、ダウンロード済みのファイルを利用する使い方では、ダウンロード中に困ったことが起きるので
これらの関数は、そのダウンロード処理を効率的に行うための仕組みが備わっています。

詳しくは…

自分も Asset Bundle について勉強中なので、後程紹介したいと思います。
とにかくアウトプットだー

追記

Unity が用意しているのを使うのがベストと思ったけど…
Cysharp のこちらがリアルタイム通信に関しては HTTP も含めてベストかもしれない

Unified Realtime/API Engine for .NET Core and Unity.
github.com