質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

解決済

1回答

2989閲覧

UnityでJsonのデータが取得できない(InvalidOperationException)

m_s

総合スコア51

Unity

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

0グッド

0クリップ

投稿2016/12/02 16:23

編集2016/12/02 16:26

Unity初心者です 長文すみません

(1)UnityでJsonのデータを、複数のプレハブのオブジェクトにfor文でセットすることをしたいのですが下記の様なエラーが出ました。どうやら、オブジェクトにJsonのデータを入れる rankingList[i]["・・・・"].ToString(); となっているところが全ておかしいらしいのです。
(2)又、取得先のPHPもデータをブラウザで表示できませんでした。恐らくコードが間違っているのですが、原因がわかりません。
(3) (1)のエラーの InvalidOperationException の意味を調べてみた所、for文で回すときに関するエラーらしいのですがはっきりとしたことも分からず、上のものとの関係性も掴めませんでした。それか、エラーの原因は(2)のPHPファイルが原因なのでしょうか?

エラーの原因が分かる方がいましたら教えてく出さると助かります。(最近質問を多くしていますが、ほんとにお世話になります(汗))

<エラー文>

InvalidOperationException: The JsonData instance has to be initialized first LitJson.JsonData.EnsureCollection () LitJson.JsonData.get_Item (Int32 index) showranking.setRanking () (at Assets/gameScene/ranking/showranking.cs:70) showranking+<rankingPhp>c__Iterator16.MoveNext () (at Assets/gameScene/ranking/showranking.cs:39) UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)

以下コード

C#

1 2// Use this for initialization 3 void Start () { 4 if (config.getDebugModeFlag ()) { 5 GameObject RankContents; 6 RankContents = Instantiate (RankContentsPrefab) as GameObject; 7 } else { 8 StartCoroutine ("rankingPhp"); 9 } 10 } 11 12private IEnumerator rankingPhp(){ 13 WWWForm date = new WWWForm (); 14 int tempTime = player.getNowTimeInt(); 15 date.AddField ("id", player.getPlayerid()); 16 WWW resultRankingphp = new WWW(config.getConnectHTML() + "getRanking.php",date); 17 yield return resultRankingphp; 18 if (resultRankingphp.error != null) { 19 Debug.Log("ログインphpにアクセス失敗"); 20 } else { 21 //Debug.Log (resultCompanyphp.text); 22 rankingList = JsonMapper.ToObject (resultRankingphp.text);//会社情報をPHPから取得 23 setRanking ();//会社情報をオブジェクトに再格納する 24 } 25 } 26 27private void setRanking(){ 28 29 float btnHeight = 0; 30 31 int j = 0; 32for (int i = 0; i < 3; i++) { 33 34 GameObject button; 35 button = Instantiate (RankContentsPrefab) as GameObject; 36 37 //生成したプレハブを子オブジェクトへ 38 //button.transform.SetParent (content.transform); 39 button.transform.parent = this.transform; 40 41 //ボタンのキャンバス関連のオブジェクトの位置を取得する 42 RectTransform btnRectTrans = button.GetComponent<RectTransform>(); 43 //ボタンのスケールを1にする 44 btnRectTrans.localScale = new Vector2 (1, 1); 45 //オブジェクトの高さを取得 46 btnHeight = btnRectTrans.sizeDelta.y; 47 //ボタンの位置を変更する 48 btnRectTrans.localPosition = new Vector2 (0, btnHeight * j); 49 50 51 Text rank = button.transform.FindChild("rank").GetComponent<Text>(); 52 rank.text = rankingList [i] ["userRank"].ToString();//70行目:おかしいと思われる所 53 54 55 Text username = button.transform.FindChild("user_name").GetComponent<Text>(); 56 username.text = rankingList [i] ["userName"].ToString(); 57 58 59 Text score = button.transform.FindChild("score").GetComponent<Text>(); 60 score.text = rankingList [i] ["userScore"].ToString(); 61 62 63 Text companyname = button.transform.FindChild("company").GetComponent<Text>(); 64 companyname.text = rankingList [i] ["company"].ToString(); 65 66 67 Text processingrate = button.transform.FindChild("processing_rate").GetComponent<Text>(); 68 processingrate.text = rankingList [i] ["processingRate"].ToString(); 69 70 71 Text attackrate = button.transform.FindChild("attack_rate").GetComponent<Text>(); 72 attackrate.text = rankingList [i] ["attackRate"].ToString(); 73 74 75 //どのユーザかを示す簡易idをつける 76 Text userId = button.transform.FindChild("userId").GetComponent<Text>(); 77 userId.text = rankingList[i]["id"].ToString(); 78 79 j++; 80 } 81

PHP

1<?php 2 $rankingList =array( 3 array( 4 'userRank' => 1, 5 'userName' => "飯田太郎", 6 'userScore' => "11000", 7 'company' => "(株)〇〇食品", 8 'processingRate' =>"60%", 9 'attackRate' => "20%", 10 'userId' => 0, 11 ), 12 array( 13 'userRank' => 2, 14 'userName' => "小林拓己", 15 'userScore' => "110520", 16 'company' => "(株)〇〇製薬", 17 'processingRate' =>"20%", 18 'attackRate' => "40%", 19 'userId' => 1, 20 ), 21 array( 22 'userRank' => 3, 23 'userName' => "斎藤洋", 24 'userScore' => "9912", 25 'company' => "(株)〇〇運送", 26 'processingRate' =>"10%", 27 'attackRate' => "30%", 28 'userId' => 2, 29 ), 30 ); 31 32 $result = json_encode($rankingList, JSON_UNESCAPED_UNICODE); 33 printf($result); 34?>

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

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

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

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

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

guest

回答1

0

自己解決

C#ScriptでなくPHPの方でprintfで上手く表示されなかったことが原因だったようです

投稿2016/12/03 13:44

m_s

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問