🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

1164閲覧

UnityでGPSを用いたARアプリ

SKAW

総合スコア4

GPS

GPSは、Global Positioning Systemの略です。衛星信号を使用して受信機の地上又は空中内の居場所を特定するナビゲーションシステムです。"GPS"は受信機のことも指します。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/10/25 06:48

編集2019/10/25 06:51

前提・実現したいこと

こちらのサイト(https://techblog.raccoon.ne.jp/archives/2019090403.html)のソースコードを用いて同じように作成していたところ、DirectionController というスクリプトのvar leg = googleDirectionData.routes[0].legs[0];の部分でエラーが出てきてしまい、経路表示が行われません。どのようにすればよいのでしょうか?

発生している問題・エラーメッセージ

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <f2e6809acb14476a81f399aeb800f8f2>:0) System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <f2e6809acb14476a81f399aeb800f8f2>:0) System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <f2e6809acb14476a81f399aeb800f8f2>:0) DirectionController+<GetDirection>c__Iterator0.MoveNext () (at Assets/DirectionController.cs:62) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)

該当のソースコード

using System.Collections; using UnityEngine; using UnityEngine.Networking; using System.Runtime.Serialization.Json; using System.Text; using System.IO; using UnityEngine.UI; public class DirectionController : MonoBehaviour { private const string GOOGLE_DIRECTIONS_API_URL = "https://maps.googleapis.com/maps/api/directions/json?key=${APIKey}&mode=walking"; // 目的地を入力させるInputField public InputField destination; // APIより取得した経路(staticMapControllerに渡すためのパラメータ) public string destinationRoute = ""; private int frame = 0; // 初期状態では目的地が入ることはないのでStartでは何もしない。 void Start() { } void Update() { // 更新は5秒に一度、目的地が設定されていない場合は取得しない。 if (frame >= 300 && destination.text != "") { Debug.Log(UnityWebRequest.UnEscapeURL(destination.text)); StartCoroutine(GetDirection()); frame = 0; } frame++; } private IEnumerator GetDirection() { // origin=開始地点。現在地からの経路を出したいので現在地を渡す。 var query = "&origin=" + UnityWebRequest.UnEscapeURL(string.Format("{0},{1}", Input.location.lastData.latitude, Input.location.lastData.longitude)); // destination=目的地。InputFieldに入力した文字列をエスケープして渡す。 query += "&destination=" + UnityWebRequest.UnEscapeURL(destination.text); UnityWebRequest req = UnityWebRequest.Get(GOOGLE_DIRECTIONS_API_URL + query); yield return req.SendWebRequest(); if (req.error == null) { // 返ってきたjsonをByte[]形式を処理できるMemoryStreamで受け取る MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(req.downloadHandler.text)); // google DirectionのJSONをオブジェクトとして読み込めるようにシリアライザを作成 var serializer = new DataContractJsonSerializer(typeof(GoogleDirectionData)); // 作成したJSON用のクラスにデシリアライズ GoogleDirectionData googleDirectionData = (GoogleDirectionData)serializer.ReadObject(ms); // データの形式としてroutes[0].legs[0]は固定なので一旦変数に格納 var leg = googleDirectionData.routes[0].legs[0]; // 書き込み前に初期化 destinationRoute = ""; for (int i = 0; i < leg.steps.Count; i++) { // 経路は|緯度,経度|という書き方になるので、受け取ったlatitude, longitudeをパイプとカンマを付けて追加していく destinationRoute += "|" + leg.steps[i].end_location.lat + "," + leg.steps[i].end_location.lng; // 経路が多すぎるとUriFormatExceptionで落ちるため上限を設定しておく。 if (i > 20) break; } } } }

試したこと

いろいろと調べてみたのですがわかりませんでした。

補足情報(FW/ツールのバージョンなど)

ver : Unity 2018.2.21f1

APIキーなどはちゃんと自分で取得しており、この段階までの地図表示や経緯度取得などはできています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

google翻訳
ArgumentOutOfRangeException: インデックスが範囲外でした。負ではなく、コレクションのサイズ未満でなければなりません.

サイズが0なんでは。

投稿2019/10/25 08:16

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問