現在、他のスクリプトから文字列を受け取ってそれをテキストボックスに流れるテキストにして表示するスクリプトを作成しています。受け取る文字列の量が多く、管理のためにstring型の配列にして受け取るようにしていたのですが、上記の通り、Array index is out of range.というエラーが発生しました。
調べると配列の要素を指定する[]内に入れていた変数が配列の範囲を超える可能性があるとのことで、配列の要素数を変数が超えることがないようにスクリプトを整えたのですが、それでもエラーが発生してしまいます。まず間違いなくこちらの技術不足が原因なのですが、自分ではエラーの原因を見つけることができませんでした。なぜエラーが発生するのか、そしてどうすれば直るのか、教えていただけると助かります。
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5public class Newtextscript : MonoBehaviour { 6 7 Text mytext; 8 9 //表示させるテキストそのもの 10 public string[] m_text; 11 12 //テキストの流れる速度を管理するためのタイマー 13 float m_timer; 14 15 //テキストの流れる速度を設定する変数 16 float m_nextletter; 17 18 //テキストの描画される文字数 19 int m_currentIndex; 20 21 //配列の要素数とカウンターを兼ねる変数。 22 public int i; 23 24 // Use this for initialization 25 void Start () { 26 //テキストを取得。 27 mytext = GetComponentInChildren<Text>(); 28 29 //各値の初期化。 30 m_timer = 0.0f; 31 m_currentIndex = 0; 32 m_nextletter = 0.1f; 33 //エラー対策。 後々別のものを代入するが、仮の配列の実体を作成。(要素数を確定していないのが原因と思ったため。) 34 m_text = new string[5]; 35 36 //エラー対策。仮の配列の実体に値を入れてみた。 37 for (i = 0; i <= 5; i++) 38 { 39 m_text[i] = ""; 40 } 41 //改めてiの値を初期化。 42 i = 0; 43 } 44 45 // Update is called once per frame 46 void Update () { 47 //流れる速度を調整するためのタイマー 48 m_timer += Time.deltaTime; 49 if (m_timer > m_nextletter) 50 { 51 //タイマーの初期化 52 m_timer = 0.0f; 53 54 //描画する文字数の増加 55 m_currentIndex++; 56 57 //描画させる文字数が元の文字列の文字数を超えないか確認。 58 if (m_currentIndex > m_text[i].Length) 59 { 60 //超えているならすべて文字列を消去し、配列内の次の文字列に移る。 61 m_currentIndex = 0; 62 i++; 63 64 } 65 //エラー対策。配列の要素数をiが超えることの無いように指定。 66 if (i >= m_text.Length) 67 { 68 i = 0; 69 } 70 } 71 //実際にテキストに文字列を描画。(表示する文字数を増やしながら繰り返すことで流れるテキストを作成。) 72 string text = m_text[i].Substring(0, m_currentIndex); 73 mytext.text = text; 74 75 } 76 77} 78 79```このスクリプトはtextの親であるcanvasにアタッチしているものです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/29 07:46
2018/03/29 07:51
2018/03/29 07:58
2018/03/29 08:04
2018/03/29 08:08 編集
2018/03/29 08:20