【Unity】PostリクエストとCookieへの保存を実装してみる

このサイトを作るときに作ったうさぎのゲーム

✞あなたは○人目の訪問者です✞という昔のサイトによくあったアレを作ってみたかったのでUnity側からサーバー上に置いたphpファイルにpostリクエストを送り、ブラウザにCookieを保存するというのを実装してみました。


1.UnityからPostリクエストを送る

Unity Web Requestを使ってphpファイルにデータを送ってみるやつがこれです。最初はSystem.Netで実装してたんだけどWebGLでは動かなかった

Postのときにデータ受信もするけど、受信だけするタイミングがいくつかあったので受け取りはGetで別で作りました


        string postStr = "key名1=" + "value名1" + "&key名2=" + "value名2";
        byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(postStr);
        string url = "phpファイルのURL";
        var req = new UnityWebRequest(url, "POST");
        req.uploadHandler = (UploadHandler)new UploadHandlerRaw(postBytes);
        req.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();
        req.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        await req.SendWebRequest();
        if (req.isNetworkError || req.isHttpError)  
        {
            Debug.Log("Network error:" + req.error);
        }
        else                  
        {
            Debug.Log("Succeeded:" + req.downloadHandler.text);
        }
 public async UniTask<Data> FetchData(){
        string url = "phpファイルのURL";
        UnityWebRequest request = UnityWebRequest.Get(url);

        await request.SendWebRequest();
        string s = null;
        if (request.isNetworkError || request.isHttpError)
        {
            Debug.Log(request.error);
        }
        else
        {
            Debug.Log(request.downloadHandler.text);
            s = request.downloadHandler.text;
        }

        nowData = strToData(s);
        return nowData;
    }


2.送られてきたものをphpで処理する

Unity Web Requestで送られてきたものをサーバーに置いたphpファイルで処理します。

phpの方はこんな感じです。

<?php
if (isset($_POST['key名1']) && isset($_POST['key名2'])) {
    if ($_POST['key名1'] == 'なにか') {
        //実行する処理
    } 
    if ($_POST['key名2'] == 'なにか') {
        //実行する処理
    }
}

  print(file_get_contents("データのテキストファイル"));

使ってるkey名とvalue名を晒すことができない(不正にどうこうされても困らないデータだけども…)

めっちゃ省いていますが送られてきたデータからプレイヤー数をカウントするとかランキングを計算するとかしてデータに書き込み、書き込んだあとのデータを表示しています。


3.Cookieに保存する

初回起動時に何人目の訪問者だったかをCookieに保存します。

以下のサイトを参考にしました。

実際に書いたものがこれです

mergeInto(LibraryManager.library, {
   
  SetVisited: function(n) {
    document.cookie = 'visited=' + n;

  },
   GetVisited: function() {
        var cookiesArray = document.cookie.split(';');
        for (var i = 0; i < cookiesArray.length; i++)
        {
            var cArray = cookiesArray[i].split('=');
            if (cArray[0].trim() === 'visited')
            {
                return cArray[1];
            }
        }
        return 0;
    }
 
});

まあほぼ一緒なのですが、「Cookieは保存されているしコンソールに表示されているものも一致しているのに0が返る」現象に陥っていました。

どうやら取得するcookieに空白が含まれていたようで、trimをすることで解決しました。

コンソールではどう見ても一致していたので一生悩んでた。コンソールにも空白を表示してくれ…



Postリクエスト、ちょうど大学の実験でやった直後だったので役に立った感があってちょっと感動しました

Unity

guest
0 コメント
Inline Feedbacks
全てのコメントを見る