UnityのC#でXMLを読み込む。

writer : uxicカテゴリー unityタグ ,

xmlデータを取得して内容を読み込むことができると、例えばTwitterのタイムラインを表示させたりブログの記事を読み込んだりと、様々なWEBアプリケーションと連携することができて夢が広がります。

javascriptならxmlを簡単に読み込める形にしてくれる外部jsを読み込むか、C#ならxmlクラスがあるのでそれを使います。で、javascriptだと日本語の情報が無いのもありなかなかうまくいかないので、どうせならということでC#でやってみました。

Twitterのタイムラインのxmlについて

読み込むxmlはTwitterのタイムラインの方が今っぽいですかね。
以下のアドレスで@motar_24のTweet(20件)がXML形式で取得できます。ブラウザのアドレスに直接打っても確認できますが、safariだと改行されずそのまま表示されます。Chromeだと整形して表示してくれますね。

http://twitter.com/statuses/user_timeline/motar_24.xml

XMLの記述内容についてはここでは省略しますが、タグで囲まれているTweetテキストがあるのがわかると思います。このテキストを引っ張ってきて表示させるわけです。
注意点として、ローカルからならTwitterのAPIにアクセス(XMLを取得)できますが、Unityのプロジェクトがウェブに公開される場合(webプレーヤー)はクロスドメインの関係で取得できないようです。flashの場合はphpをかましてできるみたいですが、Unityはわかりません。
http://d.hatena.ne.jp/nakamura001/20110730/1312044175

XMLを取得するC#

Macでやりたい場合は、Monoをインストールする必要があります。
mono

Windowsの場合、7やVistaなら問題ないですが、XPなら.NET Frameworkをインストールする必要があるかもしれません。

内容をコメントしてあるので参考にしてください。

using UnityEngine;
using System.Collections;
using System.IO;// 追加で記述
using System.Xml;// 追加で記述

public class XMLLoder : MonoBehaviour {

	// TwitterのxmlデータのURL
	string XMLFilePath = "http://twitter.com/statuses/user_timeline/motar_24.xml";

	XmlDocument doc;// XMLオブジェクト
	XmlNodeList nodeListtext;//テキストの配列

	void Start () {
		doc = new XmlDocument();// XMLオブジェクトを生成
		doc.Load(XMLFilePath);// XMLのファイルを読み込む

		// 全部配列
		nodeListtext = doc.SelectNodes("statuses/status/text");// テキストの配列のできあがり

		// あとは配列を読み込むだけ
		Debug.Log(nodeListtext[0].InnerText);

	}
}

上記のスクリプトをコピペしてGameObjectとかに貼りつけてプレビューすれば、ConsoleにTweetが表示されているはずです。
実際に使うときにはGUI.Labelに入れたりします。できてしまえば簡単ですね!

UnityでWindowsのソフトを立ち上げる。C#

writer : uxicカテゴリー unityタグ ,

EXE形式のWindowsUnityアプリから、Windowsのソフトを立ち上げるやり方。ブラウザ向けにビルドしようとするとエラーになりました。Macはもちろん不可。
当初はそんなことができるか見当もつきませんでしたが、Facebookで質問したところ教えていただきました。
スクリプトはC#です。WindowsのコマンドやC、C++も入力できるようですが、そちらはUnity Proにする必要があります。

using UnityEngine;
using System.Collections;
using System.Diagnostics;

public class OpneExcel : MonoBehaviour {

	void OnGUI ()
	{
		if(GUI.Button(new Rect(10,10,150,120),"Open Explorer"))
		{
		System.Diagnostics.Process.Start("EXPLORER.EXE","C:¥¥Documents and Settings¥¥アカウント¥¥My Documents");
		}
	}
}

上記の例では単純にボタンを押すとエクスプローラーが立ち上がります。

今回はC#なので色々とインポートしてMonoBehaviourを継承してから記述します。
まずはSystem.Diagnosticsを読込んで、後はSystem.Diagnostics.Process.Start関数で読込むだけです。

System.Diagnostics.Process.Start("アプリケーション","ファイルのパス");

注意する点として、ファイルのパスに使う¥マークは2つ必要です。C#の仕様で、多分バックスラッシュがどーのっていう理由だと思います。
あまりWindows用のEXEファイルを起動させる機会はあまりないと思いますが、業務用であれば需要がありそうです。

ということで久しぶりの投稿でした。

meta