WWWクラスを使うとWebサーバーと通信して、データを取得できます。
適当なサーバーに画像や音楽を置いておき、WWWを使ってそのURLにアクセスします。そうすると画像や音楽をダウンロードし、それをゲーム内で使うということができます。
Unityで用意されているアセットバンドルという仕組みを使うとさらにWWWの用途は広がります。アセットバンドルはシーンやプレハブなどのUnityで使えるアセットを配信することができる仕組みのことです。Google PlayやAppStoreで配信されたときは数十MBであったアプリが、数百MBにも大きくなっていく場合はこれを使っているのでしょう。
WWWを使ってサーバーとのやり取りもすることができます。HTTPでの通信をしているので、色々と使うことができるわけです。
AndroidとiOSでもこの機能が使えます。AndroidとiOSではOSの機能を使っているようでキャッシュという問題が発生します。
キャッシュはサーバーにいちいち問い合わせて通信する手間を省くために本体に一時的に保存されているデータです。同じURLでのリクエストはまずキャッシュがあるかを調べ、なければ通信を行います。キャッシュがある場合はそれをリクエストの結果として返します。この仕組みがあるためキャッシュが残っている間、同じURLでのリクエストは更新されません。
対策としてはURLを変えるしかありません。URLのクエリパラメータに意味のないパラメータを追加し、その値を毎回変更すれば良いです。
アクセスしたいURLがhttp://test/であったら、http://test/?nonsense=ランダムな値
とかにすればいいのです。nonsenseというパラメータの名前にしましたが、これはサーバーが処理しないパラメータならば何でも構いません。パラメータの値が毎回変わればURL全体として、毎回変わることになります。URLが違えばキャッシュは使われないので、毎回通信して最新のデータを取得することができるようになります。
「WWWがキャッシュされるのを防ぐ」 という記事が日本語ヘルプデスクに挙がっています。この問題は発覚しにくいものであり、何がまずいのかもわかりにくいものです。WWWを使ってなんだか更新が行われないというときはキャッシュによって更新がすぐに行われていないかもしれないということを知っておくべきです。
コメント