Unityでゲームを作っているときにサーバーと通信したい時ってありますよね?
そんな時に便利なのがwwwという通信クラスです!
今回は、
・wwwクラスとは
・wwwでWebデータ取得
といった基本的な内容から
・json形式での取得
・その他の通信手段
といった少し応用的な内容まで詳しく解説していきます。
wwwクラスとは
wwwクラスとはunityで簡単に通信を行えるようにするクラスのことです。
Webページやサーバーからデータを取得する時に使います。
通信を行ってみよう!
それでは実際に通信を行ってみましょう。
Webから画像データを取得してオブジェクトに貼り付けてみます。
まずはunityを立ち上げて取得してデータを貼り付けたいオブジェクトとスクリプトを作成してください。

次に作成したスクリプトをオブジェクトにアタッチしましょう。
それではコードを書いていきます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
private string url = "https://www.sejuku.net/blog/wp-content/uploads/2018/09/skybox.jpg";
    IEnumerator Start()
    {
        WWW www = new WWW(url);
        yield return www;
        Renderer renderer = GetComponent<Renderer>();
        renderer.material.mainTexture = www.texture;
    }
}
出力結果は、

Webから取得した画像がオブジェクトに張り付いていますね!
それでは簡単にwwwクラスの説明をしましょう。
まず変数urlに取得したい画像アドレスを格納します。
次にWWW www = new WWW(url);の部分では取得した画像アドレスを用いてWWWオブジェクトを生成しています。
wwwクラスはコルーチンと親和性が高いので、コルーチンを用いて書いています。
その後renderer.material.mainTexture = www.texture;で取得した画像データをオブジェクトに貼り付けています。
json形式で取得してみよう!
次はwwwクラスを用いてサーバーからjson形式のデータを取得してみましょう。
今回使うjson形式のデータは、
{
  "Hp":100,
  "Attack":20,
  "Defense":7
}
unityでjson形式のデータを扱うためにMiniJSONを使います。
MiniJSONを使うためにMiniJSON.csというファイルをプロジェクトに追加してください。
MiniJSON.csはこちらからダウンロードできます。
https://gist.github.com/darktable/1411710
それではコードを書いていきましょう!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//追加
using MiniJSON;
public class Test : MonoBehaviour {
private string url = "http://127.0.0.1:8887/player.json";
    IEnumerator Start()
    {
        WWW www = new WWW(url);
        yield return www;
        var jsonDict = Json.Deserialize(www.text) as Dictionary<string, object>;
        Debug.Log(jsonDict["Hp"]);
        Debug.Log(jsonDict["Attack"]);
        Debug.Log(jsonDict["Defense"]);
    }
}
出力結果は、

json形式のデータを取り出せていますね!
それでは簡単にコードの解説をしておきましょう。
wwwクラスについては先ほどと同じなので割愛し、MiniJSONの部分について解説します。
このコードでは、まずusing MiniJSON;でMiniJSONを使えるようにします。
次にvar jsonDict = Json.Deserialize(www.text) as Dictionary<string, object>;ではwwwクラスを使って取得したjsonデータをDictionaryに変換し、変数「jsonDict」に格納しています。
これはwwwクラスで取得しただけではjsonの構造に合わせられていないためです。
Dictionaryに変換することでjsonの構造に合わせることができます。
その後Dictionaryに変換されたデータをそれぞれログ出力しています。
以上がコードの説明になります。
unityでの詳しいjsonの扱いに関しては下記の記事を参照してください。
            
                 
                    
その他の通信手段
今回は通信にwwwクラスを使ってきました。
しかし、unityには他にも通信クラスがあります。
基本的なものを二つ紹介し、wwwクラスと比較していこうと思います。
UnityWebRequest
UnityWebRequestはunity5.4より正式機能となったwwwクラスに変わるものです。
wwwクラスと比較するとPUTやDELETEなどのメソッドが使えるようになり、RESTにunityで対応できるようになりました。
RESTとは簡単に説明するとWebの設計思想のことです。
RESTのリクエストメソッドにはGET、POST、PUT、DELETEがあるのですが、wwwクラスではGET、POSTにしか対応していませんでした。
UnityWebRequestではPUT、DELETEといったリクエストメソッドが使えるようになったのでRESTに対応できるようになったのです。
HttpWebRequest
wwwクラスはunityに備わっているクラスでした。
一方でHttpWebRequestクラスはc#に備わっているクラスです。
wwwクラスと比較すると導入が少し複雑で面倒ですが、早くダウンロードを行うことができます。
まとめ
いかがでしたか?
今回はwwwという通信クラスについてやりました。
wwwクラスを使えば簡単に通信を行えますので、この記事を参考にぜひ使ってみてくださいね!
 
  






 
        