はじめに
Unityの(自分の)リハビリがてら、今回はUnityでの通信処理の実装を備忘録として残します。
環境
- Unity 2021.1.24f1
どのように実装するのか?
基本的にはUnityWebRequestというクラスを利用して通信処理を実装します。
下記のUnity Script Referenceが一番参考になります。
Unity - Scripting API: Networking.UnityWebRequest.Get
サンプル
今回はUnityWebRequestを利用して気象庁のWebAPIからお天気データを取得して、特定のクラスにパースするという処理のサンプルです。
JsonUtilityの使い方は下記の記事を見てください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class SampleSceneController : MonoBehaviour
{
[SerializeField] private Button button;
// Start is called before the first frame update
void Start()
{
button?.onClick.AddListener(OnClickedButton);
}
private void OnClickedButton()
{
StartCoroutine(GetRequest("https://www.jma.go.jp/bosai/forecast/data/overview_forecast/130000.json"));
}
private IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
if (webRequest.result != UnityWebRequest.Result.Success)
{
// Error.
switch (webRequest.result)
{
case UnityWebRequest.Result.ConnectionError:
case UnityWebRequest.Result.DataProcessingError:
Debug.LogError("Error: " + webRequest.error);
break;
case UnityWebRequest.Result.ProtocolError:
Debug.LogError("HTTP Error: " + webRequest.error);
break;
default:
// ここにはこない.
break;
}
yield break;
}
var response = JsonUtility.FromJson<Response>(webRequest.downloadHandler.text);
Debug.Log("データ配信元: " + response.publishingOffice);
Debug.Log("報告日時: " + response.reportDatetime);
Debug.Log("対象の地域: " + response.targetArea);
Debug.Log("ヘッドライン: " + response.headlineText);
Debug.Log("詳細: " + response.text);
yield return null;
}
}
}
[System.Serializable]
public class Response
{
public string publishingOffice;
public string reportDatetime;
public string targetArea;
public string headlineText;
public string text;
}
結果
無事成功しました!
さいごに
コルーチンを使ったサンプルだけど、UniTaskを使ってもできそうな気がする。
おすすめ参考書
参考
気象庁の天気予報JSONファイルをWebAPI的に利用したサンプルアプリ | あんこエデュケーション
気象庁のWebサイトがリニューアルされ、天気予報情報がJSON形式で取得できるようになりました。こちらのデータをWebAPI的に取得して表示するサンプルアプリを解説付きで公開します。
コメント