2015年04月04日

Unityで外部データベースからデータを引っ張ってくる。


先日の『Unityでネットワーク利用可能かどうか調べる』でも書きましたが、
今作成しているやつが、外部サーバーとの通信が必要になってきます。
プレイの結果を外部のサーバー内のdbに保存したり、
そのdbからランキング用のデータを引っ張ってきたり…という具合でしょうか。

もちろん、直接dbに接続してデータを引っ張ってくることも出来るのですが、
ここはひとつ、phpと連携させてみっか(・∀・) と思いまして。

まずはUnity側。
接続するにはWWWFormコンポーネント?をコルーチンで利用いたしますぃ。

private IEnumerator GetData(){

  url="http://example.com/getData.php";	//url作成

  //データ送信準備
  WWWForm wwwForm = new WWWForm();
  wwwForm.AddField( "keyword", "data" );//不正接続防止用キーワード

  //MySQLのデータを取得しにいく
  WWW result = new WWW(url,wwwForm);

  // レスポンスを待つ
  yield return result;
  Debug.Log ("result="+result.text);
  break;
}

こんな感じ。ポイントはココ。

wwwForm.AddField( "keyword", "data" );

ここは、getData.phpに対して、
添字『keyword』で『data』というデータをPOSTでデータを送信するよーという意味。
不思議なもので、データを何も送信せずにいると、エラーが出てしまうんです。
なので、なにがしかのデータをphp側に送信する必要があるみたいです。

データの送信に関しては、GETでも大丈夫なのかどうかは確認してません(;・∀・)
おそらく大丈夫だとは思うのですが、そこまで気力がありませんでした(;・∀・)
まぁPOSTで送信出来ればそれで充分な気もしますし…

 

  //MySQLのデータを取得しにいく
  WWW result = new WWW(url,wwwForm);

ここで実際にサーバーに接続し、データを取得しています。
phpから返されたデータはresult.textの中に入ってまして、
必要に応じて加工、処理、出力します。

では次に、php側のコードをノセます

//変数宣言
$keyword='';	//不正防止用キーワード
$resultData='';	//返すデータ

//データ受け取り
if(isset($_POST['keyword'])){
  $keyword=$_POST['keyword'];	//キーワード
}
//キーワード確認。誤っている場合は404ページに遷移
if($keyword==null or !($keyword==$key['get_score_ranking'])){
  $redirectUrl = "http://example.com/404.html";
  header("HTTP/1.0 404 Not Found");
  print(file_get_contents($redirectUrl));
  exit;
}

//ユーザー一覧取得
$resultData=get_data();

//読み込んだデータをjson形式で端末に送信する
header('Content-type: application/json');
print json_encode($resultData);

//dbから必要なデータを引っ張ってくるメソッド
private function get_data(){
  略……
}

こんな感じ。
先ほど『何がしかのデータを送信しないとエラーが出る』てのを利用して、
アプリ側から合言葉をPOSTで送信させ、それを受け取ります。
受け取った合言葉がnullの場合、もしくは間違っている場合は、処理を中断して、
404ページに遷移させています。要はアプリ以外からのアクセスを排除する形。

ラストの部分。

//読み込んだデータをjson形式で端末に送信する
header('Content-type: application/json');
print json_encode($ranking);

この部分は、送信するデータはおそらく連想配列の形になるだろうと仮定してます。
そのままではUnity側にデータを送信できないので、
作成したデータをJSON形式にエンコードしています。
そうすれば、Unityに対しても連想配列を送信することが出来るようです。

これで一応、phpを介しての外部サーバーのデータベースからのデータひっぱりが実装できます。
あとは、Unity側で引っ張ったJSONデータを使える形にしてあげればよいのです(・∀・)

しかし、うーん…なんか読みやすい書き方はないものか…(;・∀・)

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)