こんにちは。ぶんじゃくです。
師走に向けてご多忙のこと、そして寒さがますます厳しくなってきた今日この頃、皆様いかがお過ごしでしょうか。
さて、今回は「PokeAPI」についてと、Unityでの使用方法についてご紹介したいと思います。
PokeAPIとは
PokeAPIとは、非公式ですが有志がポケモンの各種データを取得するために用意したAPIです。
上記サイトでどんなURLでどんなデータが取れるか確認できます。
レスポンスはJSON形式で返され、ここから必要なデータを取得するというわけですね。
それでは、今回はUnityでPokeAPIを使ってポケモン図鑑にあるようなデータ(高さ、重さ、等)を取得してみましょう。
前提としてUnityとJSONの相性は悪い
まず前提として、UnityはC#でコーディングしますが、このC#という言語とJSONの相性がとても悪いです。
このあたりについては私の過去の記事を読んでいただいたり、ちょっと調べていただければわかると思います。
ですので、単純にPokeAPIを使ってみたい、という方はわざわざUnity、C#を使う必要はないと思います。
その点ご了承ください。
ポケモンデータの取得のしかた
https://pokeapi.co/api/v2/pokemon/{ポケモン名かポケモンID}
で取得できます。
ポケモン名は英語名です。例えばピカチュウはpikachu、メタモンだとditto、になります。
ポケモンIDはぜんこく図鑑番号のことです。
ポケモンの英語名は日本人にはあまりなじみがないですので、今回はポケモンIDを使って取得します。
サンプルコード
using Newtonsoft.Json.Linq;
~中略~
no = 1;
UnityWebRequest req = UnityWebRequest.Get("https://pokeapi.co/api/v2/pokemon/" + no.ToString());
yield return req.SendWebRequest();
if (req.isHttpError || req.isNetworkError)
{
yield break;
}
//! JObjectでJSONを扱う
//! ポケモンデータJSONの取得
JObject jObj = JObject.Parse(req.downloadHandler.text);
//! 高さ
float height = (float)jObj["height"] * 0.1f;
サンプルではJObject(Newtonsoft.Json)を使用しています。
C#は基本型が決まっていないクラスのJSONを取り扱うことが苦手なのですが、
JObjectにしてしまうことによって、直感的にわかりやすく使用できることが利点です。
ちなみに、名前等のデータはまた別のJSONにアクセスする必要があります。
サンプルコード2
~中略~
var speciesUrl = jObj["species"]["url"].ToString();
UnityWebRequest req2 = UnityWebRequest.Get(speciesUrl);
yield return req2.SendWebRequest();
if (req2.isHttpError || req2.isNetworkError)
{
yield break;
}
//! 種族データJSONの取得
JObject jObj2 = JObject.Parse(req2.downloadHandler.text);
//! 名前
string nameJpn = string.empty;
foreach (var name in jObj2["names"])
{
if (name["language"]["name"].ToString() == "ja")
{
nameJpn = name["name"].ToString();
break;
}
}
いかがだったでしょうか。
他にもいろいろなデータがあるので、ぜひ取得して遊んでみてください。
こんかいはこの辺で。さようなら。