【Unity入門】OculusGo⇐Unity⇐Flask連携；Textをもらって表示するが出来た♬

<a href="http://www.youtube.com/watch?feature=player_embedded&v=a5Ufg-I-BfA
" target="_blank"><img src="http://img.youtube.com/vi/a5Ufg-I-BfA/0.jpg" 
 </a>
※画像をクリックするとYouTube動画につながります

いつものことながら、バグ探しの旅って、楽しいんだかなんだか。。

しかし、バグって見つかると一種の達成感がある♬

今回は、どんな話かというと、[前回Unityでは表示できるのに、OculusGoだとFlaskからもらったTextを表示できない](https://qiita.com/MuAuan/items/ce45f26b961e39c68d32)というバグ事象でした。

因みに、Unityで代入したTextは表示できているのに。。。
そして、www.textでGetしたstringはUnity内で代入したstringと同じ挙動をするという。。。
ほとんど判じ物のような状況でした。

###前回のコード
flask側

```app.py
# python
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=['GET'])
def index():
	return "Hello Unity"
if __name__ == "__main__":
	app.debug = True
	app.run()
```
Unity側のscript 

```GetText.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  ////ここを追加////

public class GetText : MonoBehaviour {
    // Use this for initialization
    IEnumerator Start () {
        WWW www = new WWW("http://localhost:5000/");
        yield return www;
        Debug.Log(www.text);
        this.GetComponent<Text>().text = www.text;
    }
    // Update is called once per frame
    void Update () {
    }
}
```
###突然閃いた。。。
実は、一昨日、昨日、本日は解明のために以下作業をしました。
（１）www.textを別途```string strA=www.text;```として、Unity内で作成した```string strB="Hello Unity";```と並べて、比較することにより、同値性を見た。
結果；Unity内では全く同じようにふるまう。特にstrA.Substring(0,5)とか実施できて、差は感じられない
ただし、これで代入したものはOculusGo内で見えることが分かった。しかしwww.textは最初Textエリアの初期値が表示されているが、それが検知と同時に消えてしまう現象が見つかった。”Hello Unity”は表示されない。

（２）上記のGetText.csはUpdate()に記載がないので、IEnumerator Start()は最初動いて、その後はGetしないので、そこを改修してずっと新規にGetTextするように改変
結果；これも実施してみるとUnity内では素早くGetTextしてくれたが、特にそれでOculusGoの表示は改善はしない。消える現象は継続。

（３）いよいよ最後の手段ということで、一度Textファイルに書き出して、再度読み込んでやれば同じstringじゃないかということで、実施した。

この時点のコードは以下のとおり

```GetText.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  ////ここを追加////
using System.IO;

public class GetText2 : MonoBehaviour {
    //通信開始（http://localhost:5000/）
    public void connectionStart(string name)
    {
        string POST_URL = "http://localhost:5000/";
        WWW www = new WWW(POST_URL);
        StartCoroutine("WaitForRequest", www);
    }
    //通信の処理待ち
    private IEnumerator WaitForRequest(WWW www)
    {
        yield return www;
        connectionEnd(www);
    }
    //通信終了後の処理
    private void connectionEnd(WWW www)
    {
        //通信結果をLogで出す
        if (www.error != null)
        {
            Debug.Log(www.error);
            var strB = www.error.Substring(0,11);
            GetComponent<Text>().text = strB;
            textSave(strB);
        }
        else
        {
            //通信結果 -> www.text
            Debug.Log(www.text);
            var strA = www.text.Substring(0,11);
            GetComponent<Text>().text = strA;
            textSave(strA);
        }
    }
    // Update is called once per frame
    void Update()
    {
        connectionStart(name);
    }
    // 引数でStringを渡してやる
    public void textSave(string txt)
    {
        StreamWriter sw = new StreamWriter("LogData.txt", false); //true=追記 false=上書き
        sw.WriteLine(txt);
        sw.Flush();
        sw.Close();
    }
}
```
【参考】
・[UnityのWWWで通信処理](https://qiita.com/consolesoup/items/1dbbe1210e62cefbcb36)
・[UnityでCSVファイルを書き出ししたときのメモ](https://qiita.com/HisatakaSuzuki/items/a97f4ebdd4b89afe3dc4)

ある意味、参考のまんまなので、動くよなぁ。。。ということで、特に解説しません。動きます。
Unity内では。。。
この場合は、
Unity内では、出力先はUnityの乗ってるマシンのDirですが、OculusGo上で動いているアプリはOculusGo内に出力するのかなぁ～
。。。
鈍いよね～ここまで来てはたと気が付きました。。。

そうなんです、OculusGo上で動くアプリのlocalhostって？？？
だよね。。。ということで、Unityが乗っているというか、Flask（Webサーバー）が動いているマシンのhost="192.***.***.***"をapp.pyに指定しました！
つまり、app.pyとして、以下のとおりとしました。

```app.py
# python
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=['GET'])
def index():
	return "Hello Unity"
if __name__ == "__main__":
	app.debug = True
	app.run(host="192.***.***.***")
```
。。。な～んだって感じに美しく動きました！
あれ？もちろん
```WWW www = new WWW("http://localhost:5000/");```
は
```WWW www = new WWW("http://192.***.***.***:5000/");```
に変更します。
###まとめ
・Textデータ（"Hello Unity"）に対してOculusGo ⇐ Unity ⇐ Flask連携が出来た
・同時にUnityの場合は、通信履歴としてTextファイルに出力できた
・PanelやCampus、Textの使い方に慣れた

・いよいよ次回は画像に挑戦しよう

一応、以下YouTube動画
[OculusGo⇐Unity⇐Flask連携が出来た♬](https://youtu.be/a5Ufg-I-BfA)
因みに、次の動画がIBMWatsonのUnity assetsが提供され、物体認識、音声認識。。などができる。。。話でした。。これからウワンもそこやろうとしてるんだけど（笑）