UnityでGPS使ってストリートビューを歩きたい

http://hwks.hatenadiary.jp/entry/2014/07/06/175224

```csharp:GPSLoader.cs
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class GPSLoader : MonoBehaviour {

	public Text label;
	IEnumerator Start() {
		if (!Input.location.isEnabledByUser) {
			label.text = "Error";
			yield break;
		}
		Input.location.Start();
		int maxWait =  120;
		while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) {
			yield return new WaitForSeconds(1);
			maxWait--;
		}
		if (maxWait < 1) {
			label.text = "Timed out";
			yield break;
		}
		if (Input.location.status == LocationServiceStatus.Failed) {
			label.text = "Unable to determine device location";
			yield break;
		} else {

			string s = "Location: " +
			           Input.location.lastData.latitude + " " +
			           Input.location.lastData.longitude + " " +
			           Input.location.lastData.altitude + " " +
			           Input.location.lastData.horizontalAccuracy + " " +
			           Input.location.lastData.timestamp;
			label.text = s;
			
		}
		Input.location.Stop();
	}
}
```

http://qiita.com/aimino/items/2149990a551bf5c0d59d

http://shigekix5.wp.xdomain.jp/?p=588

```csharp:SkyBoxStreetView.cs
using UnityEngine;
using System.Collections;
public class SkyBoxStreetView : MonoBehaviour
{
	// Skyboxに貼り付けるテクスチャ
	public Texture2D[] textures;
	// GoogleStreetViewで使用する値の宣言
	// カメラの向き
	public double heading = 0.0;
	public double pitch = 0.0;
	// 取得する画像のサイズ(640が最大)
	private int width = 640;
	private int height = 640;
	// 軽度・緯度(GoogleMapで確認できる)
	private double longitude = 139.399488;
	private double latitude = 35.785554;
	// 視野(最大120)
	public double fov;
	// 前後左右上下を設定しておく変数
	private int skyNum;
	void Start() {
		UpdateSkybox();
	}
	// メイン部分
	void UpdateSkybox() {
		textures = new Texture2D[6];
		// 前後左右上下をそれぞれ取得
		for(skyNum=0; skyNum<6; skyNum++) { 
			fov = 90; 
			switch(skyNum) { 
			case 0: //front 
				heading = 0; 
				pitch = 0; 
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum));
				break; 
			case 1: //back 
				heading = 180; 
				pitch = 0; 
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum)); 
				break; 
			case 2: // left
				heading = 90; 
				pitch = 0; 
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum)); 
				break; 
			case 3: //right
				heading = 270; 
				pitch = 0; 
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum));
				break; 
			case 4: //up
				heading = 0; 
				pitch = 90; 
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum)); 
				break;
			case 5: // down
				heading = 0; 
				pitch = -90;
				StartCoroutine(GetStreetViewImage(latitude, longitude, heading, pitch, fov, skyNum)); 
				break; 
			} 
		} 
	} // Google Map Street Viewの画像を取ってくる 
	private IEnumerator GetStreetViewImage(double latitude, double longitude, double heading, double pitch, double fov, int skyNum) { 
		string url = "http://maps.googleapis.com/maps/api/streetview?" + "size=" + width + "x" + height + "&location=" + latitude + "," + longitude + "&heading=" + heading + "&pitch=" + pitch + "&fov=" + fov + "&sensor=false";
		Debug.Log(skyNum + " : " + url);
		WWW www = new WWW(url); yield return www; 
		// texturesに取得してテクスチャをセット 
		textures[skyNum] = www.texture; 
		// ちゃんとテクスチャを取得できたらskyboxを作る
		CreateSkyBox(); 
	}
	void CreateSkyBox() { 
		// Manifestを作成
		SkyboxManifest manifest = new SkyboxManifest(textures[0], textures[1], textures[2], textures[3], textures[4], textures[5]); 
		// 作成したManifestからマテリアルを作成 
		Material material = CreateSkyboxMaterial(manifest); 
		SetSkybox(material); 
		enabled = false; 
	}
	public static Material CreateSkyboxMaterial(SkyboxManifest manifest) { 
		// Skybox形式のマテリアルを作成してテクスチャをセット 
		Material result = new Material(Shader.Find("RenderFX/Skybox")); 
		result.SetTexture("_FrontTex", manifest.textures[0]); 
		result.SetTexture("_BackTex", manifest.textures[1]); 
		result.SetTexture("_LeftTex", manifest.textures[2]); 
		result.SetTexture("_RightTex", manifest.textures[3]);
		result.SetTexture("_UpTex", manifest.textures[4]); 
		result.SetTexture("_DownTex", manifest.textures[5]); 
		return result;
	} 
	void SetSkybox(Material material) {
		// メインカメラを取得して 
		GameObject camera = Camera.main.gameObject;
		// Skyboxを取得
		Skybox skybox = camera.GetComponent<Skybox>();
		// Skyboxがなければ作成
		if (skybox == null)
			skybox = camera.AddComponent<Skybox>();
		// Skyboxにマテリアルをセット
		skybox.material = material;
	}

	// Skyboxマニフェストの構造体
	public struct SkyboxManifest
	{
		public Texture2D[] textures;
		public SkyboxManifest(Texture2D front, Texture2D back, Texture2D left, Texture2D right, Texture2D up, Texture2D down)
		{
			textures = new Texture2D[6]
			{
				front,
				back,
				left,
				right,
				up,
				down
			};
		}
	}
}
```