事前の準備
Unity + PHP + MySQLプロジェクトを構築する前に、いくつか学習しておくべき項目がある。
Awaitable とは
UnityからWebサーバーへの依頼:UnityWebRequest
これまではブラウザでサーバーに接続し、PHPスクリプトを実行してきたが、これからはUnityからリクエストを送信する。そのため、UnityWebRequest クラスを使用して、指定したURLに接続する機能がある。
GET リクエスト
// GETでリクエストを送信
// url:接続したアドレス
// request:待機できるオブジェクト
var request = UnityWebRequest.Get(url);
使用例:
// ユーザーIDでログインしているかどうかを確認
var request = UnityWebRequest.Get("https://api.my-game.co.jp/api/check_login.php?user_id=45b99aef");
ここで:
| https://api.my-game.co.jp/api | APIの「根」(Root URL) |
| check_login.php | サーバーの中で使いたい機能(ログインをチェック) |
| ?user_id=45b99aef | URLパラメータ(ユーザーのID) |
もちろん、上記のAPIはあくまでの例であり、ゲームにより変わるので、具体的なAPIはサーバーエンジニアに相談してください。
POST リクエスト
// POSTでリクエストを送信
// url:接続したアドレス
// data:POST データ (WWWForm)
// request:待機できるオブジェクト
var request = UnityWebRequest.Post(url, data);
使用例:
// POSTでデータを送るので、フォームを用意する
// サーバーが期待しているデータに合わせる
var data = new WWWForm();
data.AddField("user_id", "45b99aef");
// ログインAPIのURLへリクエストを送信
var request = UnityWebRequest.Post("https://api.my-game.co.jp/api/check_login.php", data);
これ、 GET と同じリクエストであるが、POST でデータを送信した例である。
返事を待つ
ネットワークの状況やサーバーの混雑により、返事がすぐ来ない場合もあるので、リクエストが終わるまで待機する必要がある。Awaitable を使用し、返事を待つことができる:
public async Awaitable CheckLogin(string user)
{
// POSTでデータを送るので、フォームを用意する
// サーバーが期待しているデータに合わせる
var data = new WWWForm();
data.AddField("user_id", "45b99aef");
// ログインAPIのURLへリクエストを送信
var request = UnityWebRequest.Post("https://api.my-game.co.jp/api/check_login.php", data);
// 返事を待機する
await request.SendWebRequest();
// 返事を処理
}
返事を処理
最後、サーバーの返事を確認し、適切に処理する。データが2つの求め方がある:「テキスト(文字列)」、または「バイナリデータ」
public async Awaitable CheckLogin(string user)
{
// POSTでデータを送るので、フォームを用意する
// サーバーが期待しているデータに合わせる
var data = new WWWForm();
data.AddField("user_id", "45b99aef");
// ログインAPIのURLへリクエストを送信
var request = UnityWebRequest.Post("https://api.my-game.co.jp/api/check_login.php", data);
// 返事を待機する
await request.SendWebRequest();
// 返事を処理。以下のどちらか使う
// 文字列
string textResponse = request.downloadHandler.text
// 生のバイナリデータ(画像など)
bytes[] byteResponse = request.downloadHandler.data;
// なにかの処理をする
}
JSONとC#データの変換
PHPでは、JSONのデータ形式を学んだが、Unityでも利用できる。
JsonUtility.ToJson
// C# のオブジェクトをJSONの文字列にする。
string json = JsonUtility.ToJson(なにかのオブジェクト);
これで、あるクラス、または構造体から作ったインスタンスをJSON形式の文字列を作成する。ただし:
- 公開されている(
public)変数か配列 float、int、bool、string型の変数か配列
のみ変換できます。例えば:
public class Data
{
// 経験値
public int XP = 1000;
// 名前
public string HeroName = "ヒーロー";
// private なので、JSONにできない
private float HitPower = 12.25f;
}
private void Start()
{
// インスタンスを作成
Data data = new Data();
// JSON文字列にする
string json = JsonUtility.ToJson(data);
// 表示
Debug.Log(json);
}
以下のを表示される:

もちろん、逆のもできる:
JsonUtility.FromJson
// JSONの文字列からあるクラス(または構造体)のインスタンスを作成
データ型 オブジェクト名 = JsonUtility.FromJson<データ型>(string json);
これで、ToJson() の逆処理ができる。ここで「データ型」は変換したいクラス名(または構造体名)である。例えば、
private void Start()
{
// インスタンスを作成
Data data = new Data();
// 元のデータ
Debug.Log($"前 >> 名前:{data.HeroName}, 経験値:{data.XP}");
// JSONデータ
string json = "{\"XP\":5000, \"HeroName\":\"アンパンマン\" }";
// JSONからオブジェクトにする
data = JsonUtility.FromJson<Data>(json);
// 変わった後
Debug.Log($"後 >> 名前:{data.HeroName}, 経験値:{data.XP}");
}

ポップアップ表示の確認
本プロジェクトはすでにいくつかの便利な機能を実装されている。好きなメッセージを表示し、ボタンのイベントにも登録できる
ポップアップ表示、イベント登録
// ただのポップアップを表示する(決定ボタンのみ)
PopupController.Show("タイトル", "詳細メッセージ");
// 決定ボタンとキャンセルボタンを表示し、イベントに登録
var popup = PopupController.Show("タイトル", "メッセージ", PopupButtons.Ok | PopupButtons.Cancel);
popup.ButtonClicked += OnPopupButton;
そして、他のメソッドでイベントを処理する:
// ポップアップのボタンを処理
private void OnPopupButton(PopupButtons button)
{
switch (button)
{
// 決定を押した
case PopupButtons.Ok:
break;
// キャンセルを押した
case PopupButtons.Cancel:
break;
}
}
Unityで以下のように見えます:
