コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

Unityを使って鯖江市を大いに盛り上げる方法を考える会

まずは、鯖江市に向かって一礼してから始めましょう

はい、どうも鯖江市ブロガー(大嘘)の僕です。今日も鯖江市がどうやったら世界に認知されるか考えていたら夜になっていました。いやー、どうしたもんかねぇ。



そんなわけで鯖江市の地域活性化のためにこちらのオープンデータを利用するなどをやっていこうと思います(本音は、ネタがないので)。
西山動物園の動物(XML、RDF) – めがねのまちさばえ 鯖江市
今回扱うデータは西山動物園の謎情報から利用していきたいと思います。これまじでなんのデータ引っ張ってきてるんですかね?緯度・経度的な情報あったりするけど僕にはその辺りの情報使いこなせなかった。まあいいや、そんな西山動物園を応援するために謎ツールをつくるよ。

西山動物園のサイト
鯖江市西山動物園
レッサーパンダで有名だからおもむろにレッサーパンダを見に行きたくなったらみんな行ってみよう(雑すぎる宣伝)。


Unityをやりませう

ということで、Unityつかって先ほどのオープンデータのやりとりをやっていこうと思います。いくつかそれ用のAPIが用意されてるそうだけど、今回はWWWって言うUnity古来よりあるやつを使っていきます。

参考
WWW - Unity スクリプトリファレンス


f:id:andron:20190326134832p:plain
んで、表示できました(ボタン部分は未実装)。UI周り雑に頑張る。説明テキストが欲しいけどなかったからそこは自作、表示用イラストも自作になるのかなー……。そうなってくると、あんまりオープンデータ引っ張ってくる魅力がないな……。


以下クソースコード

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using System.Xml;
using System.IO;

public class https : MonoBehaviour {
   string url = "https://www.city.sabae.fukui.jp/xml/zoo/nisiyamazoo.xml";
   public Text id;
   public Text animalName;
   public Text animalnameTop;
   public Text number;
   public Text classification;
   public Text meal;
   public Text meal2;
   public Text meal3;
    // Use this for initialization
    void Start () {
        StartCoroutine(Connect());
    }
	
    private IEnumerator Connect()
    {
        var www = new WWW(url);
        yield return www;

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(new StringReader(www.text));

        XmlNode root = xmlDoc.DocumentElement;
        Debug.Log(root.InnerText);
        Debug.Log(root.SelectNodes("nisiyamazoo/name").Count);
        Debug.Log(root.SelectNodes("nisiyamazoo/name")[0].InnerText);

        animalName = animalName.GetComponent<Text>();
        animalnameTop = animalnameTop.GetComponent<Text>(); ;
        animalName.text = root.SelectNodes("nisiyamazoo/name")[0].InnerText;
        animalnameTop.text = animalName.text;

        classification = classification.GetComponent<Text>();
        classification.text = root.SelectNodes("nisiyamazoo/classification")[0].InnerText;

        id = id.GetComponent<Text>();
        id.text = root.SelectNodes("nisiyamazoo/No")[0].InnerText;

        number = number.GetComponent<Text>();
        number.text = root.SelectNodes("nisiyamazoo/number")[0].InnerText;

        meal = meal.GetComponent<Text>();
        meal2 = meal2.GetComponent<Text>();
        meal3 = meal3.GetComponent<Text>();
        meal.text = "予定\n"+root.SelectNodes("nisiyamazoo/meal1")[0].InnerText + "\n";
        if (root.SelectNodes("nisiyamazoo/meal2")[0] != null) {
            Debug.Log("Meal2");
            meal.text += root.SelectNodes("nisiyamazoo/meal2")[0].InnerText+ "\n";
        }
        if (root.SelectNodes("nisiyamazoo/meal3")[0] != null)
        {
            Debug.Log("Meal3");
            meal.text += root.SelectNodes("nisiyamazoo/meal3")[0].InnerText;
        }
        
    }
}

Getcomponent多用しすぎな気がするけど、まあいったんこれで。というかUnityでHTTP通信して遊んでてもゲーム全然作れないやん。ただ、これで外部公開いけるかどうかはちょっと試したいので、UIもう少しいじってボタン操作良い感じにできたら公開検討してみる。


おわり