Skip to main content

事前の準備

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;

    // なにかの処理をする
}

ポップアップ表示の練習

本プロジェクト