7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity(C#),Python】API通信勉強メモ②Flaskでローカルサーバー立ち上げ

Last updated at Posted at 2019-11-27

##今回やること
この記事は前回の勉強の続きです。
【前回】:【Unity(C#)】API通信勉強メモ①

前回できなかったPostの処理を学びます。

なんもわからんなりの解釈が山盛りなのでマサカリ、オールオッケーです。

##Flask

Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである。標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる。

Wikipediaより引用

今回はFlaskというPythonのウェブアプリケーションフレームワーク1を使用して
ローカルにアプリケーションサーバーを立て、Unity側からHTTPリクエスト(POST)を送る
までやってみようと思います。

おおよそ、参考リンクに沿って進めていきます。

【参考リンク】:Pythonと連携する方法

###Flaskのインストール

$pip install flask

##GETリクエスト

まずはFlaskで立てたローカルのサーバーにGETリクエストを送ってみます。

Python側の処理
from flask import Flask

app = Flask(__name__)


@app.route("/", methods=['GET'])
def index():
    return "HIKAKIN「ブンブン!ハローユーチューブ!」"


if __name__ == "__main__":
    app.debug = True
    app.run()

Unity側の処理は下記リンクから拝借しました。
【参考リンク】:UnityでHTTPに接続する

Unity側でHTTPリクエストを送るスクリプト
using System.Collections;
using UnityEngine.Networking;
using UnityEngine;

public class HTTPGet : MonoBehaviour {

    //接続するURL
    private const string URL = "http://localhost:5000/";

     void Start()
    {
        //コルーチンを呼び出す
        StartCoroutine("OnSend", URL);
    }

    IEnumerator OnSend(string url)
    {
        //指定したURLでGET
        UnityWebRequest webRequest = UnityWebRequest.Get(url);

        //URLに接続して結果が戻ってくるまで待機
        yield return webRequest.SendWebRequest();

        //エラーが出ていないかチェック
        if (webRequest.isNetworkError)
        {
            //通信失敗
            Debug.Log(webRequest.error);
        }
        else
        {
            //通信成功
            Debug.Log("Get" + " : "+webRequest.downloadHandler.text);
        }
    }
}

GetHIKAKIN.gif

成功しました。
①Python側(VSC)でデバッグを開始
②UnityでPlay
という順番です。

##POSTリクエスト

次はFlaskで立てたローカルのサーバーにPOSTリクエストを送ってみます。
@app.route("/", methods=['POST', 'GET'])にPOSTを追加しただけです。


from flask import Flask

app = Flask(__name__)


@app.route("/", methods=['POST', 'GET'])
def index():
    return "HIKAKIN「ブンブン!ハローユーチューブ!」"


if __name__ == "__main__":
    app.debug = True
    app.run()

実際にやってみて思ったこととしては結局POSTとGETは何が違うんだよってことです。
この疑問に関しては下記リンクを見て一旦深く考えるのを止めることにしました。
【引用元】:GETとPOSTの違いについて

本当はGETでやるべきこともPOSTでできてしまうのです。
やろうと思えばすべての処理をPOSTで作れてしまうのです。
この辺りは思想的な話もあるので、何とも言えない部分です。

##次回やること
Postの処理も上手くいったので次回はUnity側から入力した情報を登録 & ログインする機能を作っていきます。

とりあえずわかっていることとしては、
リクエストを送る際に情報を渡す方法として、
Unity側にWWW.Formが用意されていることです。

    //POSTする情報
    WWWForm form = new WWWForm();
    form.AddField("user_id", idInputField.text, Encoding.UTF8);
    form.AddField("password",passInputField.text, Encoding.UTF8);

上記のようにUnity側でログイン画面に入力したIDやパスワードをサーバーに送れる。。。はずです。


やりました→【Unity(C#),Python】API通信勉強メモ③簡易版ログイン機能の実装

  1. フレームワークとライブラリの違い

7
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?