Unityメモ6:Spriteに文字、ゲームオブジェクトの子供へのアクセス、ネットへの接続確認、GetやPostのリクエスト、Railsのセッション情報

オリジナルゲーム作成中のUnityのメモ、その6


Spriteに文字を入れる

これをするのに手間がかかった。

画像ファイル(Wall.png)をAssetsのSpritesフォルダに入れる。そのSpritesフォルダのWallをシーンビューにドロップする。Wallオブジェクトに空のオブジェクトを追加する。空のオブジェクトをCanvasという名前に変更する。CanvasオブジェクトにAdd ComponentからCanvasを追加する。Canvasオブジェクトを右クリックしてUI Textを追加する。

Textオブジェクト
Width:100 Height:100
Scale X:0.01 Y:0.01
Best Fitにチェック、Max Sizeを300にする。

これでWall上にテキストが表示されるようになる。TextオブジェクトのWidth、Height、Scale、Max Sizeなどは各自変更する。これ以外の方法で表示させようとすると、Colliderを無視したり、テキストがWallの後ろにいって表示されなかったりする。

Animatorで動かしているオブジェクト上に表示しているテキストを変更するのは難しい。なぜか一段前のテキストが表示されてしまう。

ゲームオブジェクトの子供やComponent(スクリプト)へのアクセスの仕方

ゲームオブジェクトの子供を探すにはTransformにしてから探す。
Transform transform = gameObject.transform.Find("gameobjectChild");

何かしらのgameObjectにスクリプト(GameController.cs)を追加したとする。スクリプトへのアクセスの仕方は下記になる。
GameController gameController = gameObject.GetComponent<GameController>();
gameController.publicInteger = 10; //などなど

インターネットへの接続確認

インターネットに接続しているかどうをは下記でチェックできる。
switch (Application.internetReachability) {
case NetworkReachability.NotReachable:
	//インターネットにつながっていない場合の処理
	break;
case NetworkReachability.ReachableViaCarrierDataNetwork:
	//3GやLTEでネットにつながっている場合
	break;
case NetworkReachability.ReachableViaLocalAreaNetwork:
	//Wifiでネットにつながっている場合
	break;
}

GetやPostのリクエスト

UnityからWebアプリなどのAPIへGETリクエストしたりデータをPostする場合はWWWを使う。

GETリクエスト
void Start () {
    StartCoroutine(GetRequest());
}

IEnumerator GetRequest() {
	WWW www = new WWW("http://example.com/");
	yield return www;
	if (www.error == null) {
		print("success: " + www.text);
	} else {
		print("something wrong: " + www.text);
	}
}

POSTリクエスト
void Start () {
    StartCoroutine(PostRequest());
}

IEnumerator PostRequest() {
	WWWForm form = new WWWForm();
	form.AddField("name", "Taro");
	byte[] rawData = form.data;

	//headerを入れる場合
	//Dictionary<string, string> headers = new Dictionary<string, string>();
	//headers.Add("Cookie", "cookie value");

	WWW www = new WWW("http://example.com/", rawData);

	//headerを入れる場合
	//WWW www = new WWW("http://example.com/", rawData, headers);

	yield return www;
	if (www.error == null) {
		print("success: " + www.text);
	} else {
		print("something wrong: " + www.text);
	}
}
JSONでデータが帰ってくる場合は、Unityメモ5に書いてあるLitJSONを使えば解析して必要な値を取り出すことができる。

Railsのセッション情報

RailsでPostする場合、CSRF対策でauthenticity_tokenを渡してあげる必要があるけど、Unityからのアクセスの場合これだけではできない。headerにセッション情報を追加してPostする必要がある。

UnityでRailsのセッション情報を手に入れるやりかた
string cookie = "";
foreach (KeyValuePair<string, string> kv in www.responseHeaders) {
	if(kv.Key == "SET-COOKIE"){
		cookie = kv.Value;
	}
}
getして手に入るwwwの中にresponseHeadersがある。その中のSET-COOKIEを手に入れて、Postするときにheaders.Add(“Cookie”, cookie)を追加する。これをauthenticity_tokenを入れてもRailsのCSRF対策ではじかれる。

コメントを残す

メールアドレスが公開されることはありません。