こんにちは。
今回はUnity・Ruby on Rails間のデータ送受信の方法を説明します。
環境
- Unity 5.6.0f3
- Rails 5.0
データ送信
データを送信する場合の例です。
Unity側
using UnityEngine.Networking;
public void ConnectionStart(){
StartCoroutine(Coneection("str"));
}
private IEnumerator Connection(string name)
{
WWWForm form = new WWWForm();
form.AddField("name", name);
UnityWebRequest request = UnityWebRequest.Post("https://myapp.com", form);
// リクエスト送信
yield return request.Send();
if (request.isError) {
Debug.Log ("エラー:" + request.error);
} else {
if (request.responseCode == 204) {
Debug.Log ("せいこう!");
} else {
Debug.Log ("しっぱい…:" + request.responseCode);
}
}
}
送信するデータはWWWForm
クラスのAddField
メソッドを使って設定します。
yield return request.Send();
はUnityのコルーチンという機能を使っています。
ここでは、リクエストの結果が返ってくるまで次の処理に行かないようにしています。
request.responseCode
にはリクエストのHTTPステータスコードが入っています。
Rails側
post '/', to: 'top_pages#create'
def create
puts params[:name]
end
Railsでは、routes.rbとtop_pages_controller.rbに上記のコードを追加します。
Unity側のform.AddField("name", name);
の第1引数と、
Rails側のparams[:name]
のシンボルが対応しています。
さらに、Unity側のform.AddField("name", name);
の第2引数と、
Rails側のparams[:name]
の中身が対応しています。
データ受信
データを受信する場合の例です。
Unity側
using UnityEngine.Networking
public void ConnectionStart(){
StartCoroutine(Connection());
}
private IEnumerator Connection() {
UnityWebRequest request = UnityWebRequest.Get("https://myapp.com/show");
// リクエスト送信
yield return request.Send();
if (request.isError) {
Debug.Log("エラー:" + request.error);
} else {
if (request.responseCode == 200) {
Debug.Log ("せいこう!");
Debug.Log (request.downloadHandler.text));
} else {
Debug.Log ("しっぱい…:" + request.responseCode);
}
}
}
基本的にデータ送信とほとんど変わりません。Railsから受信したデータはrequest.downloadHandler.text
に入っています。
Rails側
get '/show', to: 'top_pages#show'
def show
render :text "str"
end
Railsのコードも基本的にデータ送信とほとんど変わりません。
render
を使うことでRailsからUnityにデータを送れます。
ここでは文字列を例にしましたが、文字列以外も送れます。
何か質問がありましたらお気軽に。