さて、前回の『Unityで外部データベースからデータを引っ張ってくる』の続きです。
前回、PHP側からUnity側にデータを送る際に、
送るデータをJSONデータに変換していたと思います。
具体的にはこの部分。
//読み込んだデータをjson形式で端末に送信する
header('Content-type: application/json');
print json_encode($ranking);
JSONデータってのはテキストベースのデータフォーマットのことでして…
$data=array(
'name'=>'sabao',
'sex'=>'male',
'age'=>48,
'weight'=>80,
'birthday'=>'1978-04-15'
);
PHPでのこの連想配列データをJSONデータにすると、
{
"name": "sabao",
"sex": "male",
"age": 48,
"weight": 80,
"birthday": "1978-04-15"
}
こんな感じになります。
この形にしてあげると、Unity側でのデータの受け取りが可能なのです。
しかしながらJSONデータそのままではUnity側では扱いきれないので、
使えるように”LitJSON”のPluginを追加します。
“http://lbv.github.io/litjson/”にアクセスして、
“LitJson.dll”をダウンロードしたら、/assets/Pluginsに突っ込んでくださいまし。
そして、前回のソースに改良を加えたのがこちら。
using LitJson; //Litjson読み込み
private IEnumerator GetData(){
url="http://example.com/getData.php"; //url作成
//各種変数の宣言
string name; //名前
string sex; //性別
int age; //年齢
int weight; //体重
string birthday; //誕生日
//データ送信準備
WWWForm wwwForm = new WWWForm();
wwwForm.AddField( "keyword", "data" );//不正接続防止用キーワード
//MySQLのデータを取得しにいく
WWW result = new WWW(url,wwwForm);
// レスポンスを待つ
yield return result;
//返ってきたjsonデータをエンコード
JsonData jsonParser = JsonMapper.ToObject(result.text);
//各データを変数に格納
name=jsonParser["id"].ToString();
sex=jsonParser["sex"].ToString();
age=(int)jsonParser["age"];
weight=(int)jsonParser["weight"];
birthday=jsonParser["birthday"].ToString();
//データ出力
Debug.Log ("データを出力するよッ!!");
Debug.Log ("名前:"+name);
Debug.Log ("性別:"+sex);
Debug.Log ("年齢:"+age);
Debug.Log ("体重:"+weight);
Debug.Log ("誕生日"+birthday);
Debug.Log ("出力終了ッ!!(・∀・)");
break;
}
こんな感じ。
冒頭の『using LitJson;』を忘れずに。
//返ってきたjsonデータをエンコード
JsonData jsonParser = JsonMapper.ToObject(result.text);
この部分で、JSONデータをエンコードしています。
result.text内に、PHPから取得したJSONデータが入ってるんで、
それをJsonData型の配列変数に変換してるという感じ。
厳密に言うと違うんだろうけど、そう考えたほうが理解しやすいかなぁと勝手に勘違いしてます。
//各データを変数に格納
name=jsonParser["id"].ToString();
sex=jsonParser["sex"].ToString();
age=(int)jsonParser["age"];
weight=(int)jsonParser["weight"];
birthday=jsonParser["birthday"].ToString();
この部分で、JSONデータからエンコードしたデータを、
各種変数に代入してます。
それぞれint,stringにキャストしているのは、
そのままだと『型が違うわよ!!ヽ(`Д´#)ノ』とerrorになってしまうためです。
以上でごわす。
これで、一応サーバーとの通信は実装できます。