前提・実現したいこと
初学者で、Unity(C#)でタイピングゲームを作っています。
使っているスクリプトはこれのみです。
エラーが出ずに進められるようにしたいです。
発生している問題・エラーメッセージ
2問目で入力を行おうとすると IndexOutOfRangeException: Index was outside the bounds of the array. TypingSoft.Update () (at Assets/TypingSoft.cs:57)が表示されてしまいます。
該当のソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TypingSoft : MonoBehaviour { // 問題の何文字目か private int index; // 問題の日本語文 private string[] qJ = {"問題", "テスト", "タイピング"}; // 問題のローマ字文 private string[] qR = {"monndai", "tesuto", "taipinngu"}; // 日本語表示テキスト private Text UIJ; // ローマ字表示テキスト private Text UIR; // 日本語問題 private string nQJ; // ローマ字問題 private string nQR; // 問題番号 private int num; // 入力した文字列テキスト private Text UII; // 正解数 private int correctN; // 正解数表示用テキストUI private Text UIcorrectA; // 正解した文字列を入れておく private string correctString; void Start() { // テキストUIを取得 UII = transform.Find("InputPanel/Input").GetComponent<Text>(); UIcorrectA = transform.Find("DataPanel/Correct Answer").GetComponent<Text>(); // テキストUIを取得 UIJ = transform.Find("InputPanel/QuestionJ").GetComponent<Text>(); UIR = transform.Find("InputPanel/QuestionR").GetComponent<Text>(); // データ初期化処理 correctN = 0; UIcorrectA.text = correctN.ToString(); // 問題出力メソッドを呼ぶ OutputQ(); } // Update is called once per frame void Update() { // キーを押しているかどうか if(Input.anyKeyDown && (!Input.GetMouseButton(0) && !Input.GetMouseButton(1) && !Input.GetMouseButton(2)) ) { // 今見ている文字とキーボードから打った文字が同じかどうか if(Input.GetKeyDown(nQR[index].ToString())) { // 正解時の処理を呼び出す Correct(); } else { // 失敗時の処理を呼び出す Mistake(); } } } //タイピング正解時の処理 void Correct() { Debug.Log("正解"); // 正解数を増やす correctN++; UIcorrectA.text = correctN.ToString(); // 正解率の計算 CorrectAnswerRate(); // 正解した文字を表示 correctString += nQR[index].ToString(); UII.text = correctString; // 次の文字を指す index++; // 問題を入力し終えたら次の問題を表示 if(index >= nQR.Length) { OutputQ(); } } // タイピング失敗時の処理 void Mistake() { Debug.Log("失敗"); } // 正解率の計算処理 void CorrectAnswerRate() { Debug.Log("正解率計算"); } // 新しい問題を表示するメソッド void OutputQ() { // テキストUIを初期化する UIJ.text = ""; UIR.text = ""; UII.text = ""; // 正解した文字列を初期化 correctString = ""; // 問題数内でランダムに選ぶ num = Random.Range(0, qJ.Length); // 選択した問題をテキストUIにセット nQJ = qJ[num]; nQR = qR[num]; UIJ.text = nQJ; UIR.text = nQR; } }
試したこと
問題ごとに初期化していないindexに問題があるのではないかなと考え、index=0などを挿入したのですがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。