先日の『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データを使える形にしてあげればよいのです(・∀・)
しかし、うーん…なんか読みやすい書き方はないものか…(;・∀・)

