気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity NodeJs】で簡単なAPIサーバーを作成する Get編

スポンサーリンク

f:id:Wojtek:20191205001601j:plain


プログラミングには様々な言語やありますよね。
エンジニアの世界でも業種は多岐に渡ります。

私は今までフロントエンド(クライアント)エンジニアとしてやって来ましたが、元々サーバーサイドにも興味があり、いい機会なので「Nodejs 」をUnityと掛け合わせて「ハイスコアAPIサーバー」を作成したので、メモ感覚で記載してみました。

使用言語とソフト

・NodeJs
・NodeJs Express
・MySql
・Unity


1. NodeJs側のソースコード

require('date-utils');
var moment = require('moment');
var bodyParser = require('body-parser');
const exp = require("express");
const app = exp();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.listen(3000, function () {
  console.log("Start GetServer");
})

const mysql = require('mysql');

app.get("/GET", function (req, res, nex) {

  let con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    port: 3306,
    database: 'playerRank'
  });
  con.query("SELECT * FROM RANKPLAYER", function (e, r) {
    if (e) {
      console.error('error connecting: ' + e.stack);
      return;
    }
    console.log(r);
    response(res, "OK", r);
  })
})


事前にMySqlで「playerRank」データベースを作成して、RANKPLAYER という名前のテーブルを作成しています。

ネーミングセンス

次にUnity側の処理を記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.IO;
using UnityEngine.Networking;
using System.Text;

public class GetNodeJsBtn : MonoBehaviour
{
    private const string URL = "http://localhost:3000/Get";

    public void OnGetJson()
    {
        StartCoroutine("mOnSend", URL);
    }

    private IEnumerator mOnSend(string url)
    {
        UnityWebRequest webRequest = UnityWebRequest.Get(url);

        yield return webRequest.SendWebRequest();

        //エラーが出ていないかチェック
        if (webRequest.isNetworkError)
        {
            //通信失敗
            Debug.Log(webRequest.error);
            
        }
        
         Debug.Log(webRequest.downloadHandler.text);
        //受信したテキスト(json)を変換
        Json jsonClass = JsonUtility.FromJson<Json>(webRequest.downloadHandler.text);

       //通信失敗
        
        foreach(var data in  jsonClass.data)
        {
            Debug.Log($"jsonClass {data.id}");
        }
    }


UnityWebRequestを使用して、先ほど作成したNodeJsのGetAPIにアクセスしています。
そのあとJsonUtilityでJsonクラスに変更しています。