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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

2回答

4331閲覧

このようなエラーが表示されます

Shachochan

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2020/05/22 11:52

編集2020/05/22 14:25

発生しているエラー

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 <437ba245d8404784b9fbab9b439ac908>:0) System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <437ba245d8404784b9fbab9b439ac908>:0) System.Collections.Generic.List`1[T].get_Item (System.Int32 index) (at <437ba245d8404784b9fbab9b439ac908>:0) LogInManager+<>c.<Update>b__15_2 (System.Collections.Generic.List`1[T] objList, NCMB.NCMBException e) (at Assets/Scripts/LogInManager.cs:125) NCMB.NCMBQuery`1+<>c__DisplayClass44_0[T].<Find>b__0 (System.Int32 statusCode, System.String responseData, NCMB.NCMBException error) (at Assets/NCMB/Script/NCMBQuery.cs:588) NCMB.Internal.NCMBConnection+<SendRequest>d__37.MoveNext () (at Assets/NCMB/Script/NCMBConnection.cs:458) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <480508088aee40cab70818ff164a29d5>:0)

該当のコード

C#

1using UnityEngine; 2using System.Collections; 3using System.Collections.Generic; 4using System.Threading; 5using UnityEngine.SceneManagement; 6using NCMB; 7 8public class LogInManager : MonoBehaviour 9{ 10 11 private GameObject guiTextLogIn; // ログインテキスト 12 private GameObject guiTextSignUp; // 新規登録テキスト 13 14 // ログイン画面のときtrue, 新規登録画面のときfalse 15 private bool isLogIn; 16 17 // ボタンが押されると対応する変数がtrueになる 18 private bool logInButton; 19 private bool signUpMenuButton; 20 private bool signUpButton; 21 private bool backButton; 22 23 // テキストボックスで入力される文字列を格納 24 public string id; 25 public string pw; 26 27 public string username { get; set; } 28 29 void Start() 30 { 31 32 FindObjectOfType<UserAuth>().logOut(); 33 34 // ゲームオブジェクトを検索し取得する 35 guiTextLogIn = GameObject.Find("GUITextLogIn"); 36 guiTextSignUp = GameObject.Find("GUITextSignUp"); 37 38 isLogIn = true; 39 guiTextSignUp.SetActive(false); 40 guiTextLogIn.SetActive(true); 41 42 } 43 44 void OnGUI() 45 { 46 47 // ログイン画面 48 if (isLogIn) 49 { 50 51 drawLogInMenu(); 52 53 // ログインボタンが押されたら 54 if (logInButton) 55 FindObjectOfType<UserAuth>().logIn(id, pw); 56 57 // 新規登録画面に移動するボタンが押されたら 58 if (signUpMenuButton) 59 isLogIn = false; 60 } 61 62 // 新規登録画面 63 else 64 { 65 66 drawSignUpMenu(); 67 68 // 新規登録ボタンが押されたら 69 if (signUpButton) 70 FindObjectOfType<UserAuth>().signUp(id, pw); 71 72 // 戻るボタンが押されたら 73 if (backButton) 74 isLogIn = true; 75 } 76 } 77 78 void Update() 79 { 80 // currentPlayerを毎フレーム監視し、ログインが完了したら 81 if (FindObjectOfType<UserAuth>().currentPlayer() != null) 82 { 83 string username = FindObjectOfType<UserAuth>().currentPlayer(); 84 85 NCMBQuery<NCMBObject> query_p = new NCMBQuery<NCMBObject>("Player"); 86 query_p.WhereEqualTo("Name", username); 87 query_p.FindAsync((List<NCMBObject> objList, NCMBException e) => 88 { 89 //検索成功したら 90 if (e == null) 91 { 92           //ここでエラーが発生しています 93 PlayerPrefs.SetInt("PlayerATK", System.Convert.ToInt32(objList[0]["ATK"])); 94 PlayerPrefs.SetInt("PlayerLevel", System.Convert.ToInt32(objList[0]["Level"])); 95 PlayerPrefs.SetInt("PlayerMAX_HP", System.Convert.ToInt32(objList[0]["MAX_HP"])); 96 PlayerPrefs.SetInt("NowEXP", System.Convert.ToInt32(objList[0]["NowEXP"])); 97 PlayerPrefs.SetInt("needEXP", System.Convert.ToInt32(objList[0]["needEXP"])); 98 PlayerPrefs.SetInt("Tensei_Num", System.Convert.ToInt32(objList[0]["Tensei_Num"])); 99 PlayerPrefs.SetInt("Star", System.Convert.ToInt32(objList[0]["Star"])); 100 PlayerPrefs.Save(); 101 } 102 }); 103 104 NCMBQuery<NCMBObject> query_w = new NCMBQuery<NCMBObject>("Weapon"); 105 query_w.WhereEqualTo("Name", username); 106 query_w.FindAsync((List<NCMBObject> objList, NCMBException e) => 107 { 108 109 //検索成功したら 110 if (e == null) 111 {   112 //ここでエラーが発生します         113 PlayerPrefs.SetInt("WeaponLevel", System.Convert.ToInt32(objList[0]["Level"])); 114 PlayerPrefs.SetInt("WeaponATK", System.Convert.ToInt32(objList[0]["ATK"])); 115 PlayerPrefs.Save(); 116 } 117 }); 118 119 NCMBQuery<NCMBObject> query_b = new NCMBQuery<NCMBObject>("Boss"); 120 query_b.WhereEqualTo("Name", username); 121 query_b.FindAsync((List<NCMBObject> objList, NCMBException e) => 122 { 123 124 //検索成功したら 125 if (e == null) 126 { 127 //ここでエラーが発生します 128 PlayerPrefs.SetInt("BossSummon", System.Convert.ToInt32(objList[0]["Summon"])); 129 PlayerPrefs.SetInt("SlimeLevel", System.Convert.ToInt32(objList[0]["Slime"])); 130 PlayerPrefs.SetInt("RabbitLevel", System.Convert.ToInt32(objList[0]["Rabbit"])); 131 PlayerPrefs.SetInt("CerberusLevel", System.Convert.ToInt32(objList[0]["Cerberus"])); 132 PlayerPrefs.SetInt("SkeletonLevel", System.Convert.ToInt32(objList[0]["Skeleton"])); 133 PlayerPrefs.SetInt("ShujinLevel", System.Convert.ToInt32(objList[0]["Shujin"])); 134 PlayerPrefs.SetInt("SquirrelLevel", System.Convert.ToInt32(objList[0]["Squirrel"])); 135 PlayerPrefs.SetInt("Ice_golemLevel", System.Convert.ToInt32(objList[0]["Ice_golem"])); 136 PlayerPrefs.SetInt("DeathmouseLevel", System.Convert.ToInt32(objList[0]["Deathmouse"])); 137 PlayerPrefs.SetInt("DyurahanLevel", System.Convert.ToInt32(objList[0]["Dyurahan"])); 138 PlayerPrefs.SetInt("SakyubasuLevel", System.Convert.ToInt32(objList[0]["Sakyubasu"])); 139 PlayerPrefs.SetInt("NyaruratohotepuLevel", System.Convert.ToInt32(objList[0]["Nyaruratohotepu"])); 140 PlayerPrefs.SetInt("ShivaLevel", System.Convert.ToInt32(objList[0]["Shiva"])); 141 PlayerPrefs.SetInt("MarozorondLevel", System.Convert.ToInt32(objList[0]["Marozorond"])); 142 PlayerPrefs.SetInt("ShachoLevel", System.Convert.ToInt32(objList[0]["Shacho"])); 143 PlayerPrefs.SetInt("CatLevel", System.Convert.ToInt32(objList[0]["Cat"])); 144 PlayerPrefs.SetInt("BirdLevel", System.Convert.ToInt32(objList[0]["Bird"])); 145 PlayerPrefs.SetInt("Rabbit2Level", System.Convert.ToInt32(objList[0]["Rabbit2"])); 146 PlayerPrefs.SetInt("AmabieLevel", System.Convert.ToInt32(objList[0]["Amabie"])); 147 PlayerPrefs.SetInt("NekuroLevel", System.Convert.ToInt32(objList[0]["Nekuro"])); 148 PlayerPrefs.SetInt("ArcangelLevel", System.Convert.ToInt32(objList[0]["Arcangel"])); 149 PlayerPrefs.SetInt("HekantokeiruLevel", System.Convert.ToInt32(objList[0]["Hekantokeiru"])); 150 PlayerPrefs.Save(); 151 } 152 }); 153 154 SceneManager.LoadScene("HomeScene"); 155 } 156 } 157 158 private void drawLogInMenu() 159 { 160 // テキスト切り替え 161 guiTextSignUp.SetActive(false); 162 guiTextLogIn.SetActive(true); 163 164 // テキストボックスの設置と入力値の取得 165 GUI.skin.textField.fontSize = 20; 166 int txtW = 150, txtH = 40; 167 id = GUI.TextField(new Rect(Screen.width * 1 / 2, Screen.height * 1 / 3 - txtH * 1 / 2, txtW, txtH), id); 168 pw = GUI.PasswordField(new Rect(Screen.width * 1 / 2, Screen.height * 1 / 2 - txtH * 1 / 2, txtW, txtH), pw, '*'); 169 170 // ボタンの設置 171 int btnW = 180, btnH = 50; 172 GUI.skin.button.fontSize = 20; 173 logInButton = GUI.Button(new Rect(Screen.width * 1 / 4 - btnW * 1 / 2, Screen.height * 3 / 4 - btnH * 1 / 2, btnW, btnH), "Log In"); 174 signUpMenuButton = GUI.Button(new Rect(Screen.width * 3 / 4 - btnW * 1 / 2, Screen.height * 3 / 4 - btnH * 1 / 2, btnW, btnH), "Sign Up"); 175 176 } 177 178 private void drawSignUpMenu() 179 { 180 // テキスト切り替え 181 guiTextLogIn.SetActive(false); 182 guiTextSignUp.SetActive(true); 183 184 // テキストボックスの設置と入力値の取得 185 int txtW = 150, txtH = 35; 186 GUI.skin.textField.fontSize = 20; 187 id = GUI.TextField(new Rect(Screen.width * 1 / 2, Screen.height * 1 / 4 - txtH * 1 / 2, txtW, txtH), id); 188 pw = GUI.PasswordField(new Rect(Screen.width * 1 / 2, Screen.height * 2 / 5 - txtH * 1 / 2, txtW, txtH), pw, '*'); 189 190 191 // ボタンの設置 192 int btnW = 180, btnH = 50; 193 GUI.skin.button.fontSize = 20; 194 signUpButton = GUI.Button(new Rect(Screen.width * 1 / 4 - btnW * 1 / 2, Screen.height * 3 / 4 - btnH * 1 / 2, btnW, btnH), "Sign Up"); 195 backButton = GUI.Button(new Rect(Screen.width * 3 / 4 - btnW * 1 / 2, Screen.height * 3 / 4 - btnH * 1 / 2, btnW, btnH), "Back"); 196 } 197 198} 199

色々と調べてみたのですが、原因がわかりませんでした。

コードのエラーが発生する部分にコメントを打ちました

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

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

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

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

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

BluOxy

2020/05/22 12:57 編集

調べたページを質問に添付し、そのページの何が分からなかったかを試したこととして記載してください
Shachochan

2020/05/22 13:20

Listの部分を間違えていることが多いというのを見つけたのですが、そこは何ともなさそうで、ほかに調べて該当しそうな項目が見当たらなかったです。 NCMBを利用しているので、その関係のエラーかと思われるのですが...
BluOxy

2020/05/22 13:49

> Listの部分を間違えていることが多いというのを見つけた こちらの記事を添付してください。調べ方が問題の可能性があるかもしれません。
SHOMI

2020/05/22 13:59

>Listの部分を間違えていることが多いというのを見つけたのですが、そこは何ともなさそう エラーメッセージはListのインデックスが範囲外だと言っているようですが…
soi013

2020/05/22 14:16

そのエラーが発生する最小限のソースコードまで切りつめてください。 エラーが発生した行をコメントなどで示してください。
Zuishin

2020/05/22 14:31

List<T> で IndexOutOfRange が出てるんで、objList[0] が原因だと思います。該当箇所ありすぎだし objList がどうなってるのかわからないので、それ以上はわかりません。処理を追ってください。
m.ts10806

2020/05/22 20:42

>そこは何ともなさそうで それは確認してみないとこちらでは判断できません。 自身で解決できない場合、その人が断言できるほど「違う」情報かどうかは判断できないはずです。
guest

回答2

0

Listの部分を間違えていることが多いというのを見つけたのですが、そこは何ともなさそうで、ほかに調べて該当しそうな項目が見当たらなかったです。

asm さんの回答が直接的な解決策なので、別の方向で回答します。

この質問の根本的な問題は 調べるワードが不適切なこと だと思っています。
今回の場合は、以下のように行動すると自己解決ができたと思います。

  1. ArgumentOutOfRangeExceptionが発生したという事象をエラーメッセージを読むことで確認する
  2. ArgumentOutOfRangeExceptionがなぜ発生するかを知るために「C# ArgumentOutOfRangeException」と検索する
  3. ArgumentOutOfRangeExceptionが何行目で発生したかをエラーメッセージを見て確認する
  4. ArgumentOutOfRangeExceptionを引き起こしている原因となる処理を修正し、ArgumentOutOfRangeExceptionが発生しないようにする

上記の行動をより抽象的に書くと下記になります。

  1. エラーをエラーメッセージを読むことで確認する
  2. エラーの原因を知るためにキーワードを抜粋して検索エンジンで検索する
  3. エラーがどこで発生しているかをエラーメッセージを見て確認する
  4. エラーの原因となる処理を修正し、取り除く

今回のような「エラーの原因が分からない」という旨の質問をしたくなったときは上のプロセスを実践してください。
※上記のような下調べを他のユーザーに行わせた場合、質問ではなく作業依頼と受け取られる可能性があります

投稿2020/05/22 23:53

BluOxy

総合スコア2663

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

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

0

NCMBのドキュメントらしきものを読んでみましたが
FindAsync時に検索しても該当データがない場合にエラーが発生するのかが曖昧ですね。

ソースを読んでみても「該当データなし」は成功扱いのようです。

したがって、

c#

1//検索成功かつ該当データありの場合 2if (e == null && objList.Count > 0)

のように該当データがあることを確認するとよいかと思います。

投稿2020/05/22 22:17

asm

総合スコア15147

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問