制限時間をつくっています。
5分間の制限になっており、
0~9のスプライトをイメージの配列で回そうと思っておりますが
エラーが出てしましました。
エラーメッセージ
IndexOutOfRangeException: Array index is out of range. Timemanager.SetNumber (Int32 min, Int32 val1, Int32 val2, Int32 val3) (at Assets/ScriputsUI/Timemanager.cs:52) Timemanager+<TimeStart>c__Iterator0.MoveNext () (at Assets/ScriputsUI/Timemanager.cs:64) C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17) UnityEngine.MonoBehaviour:StartCoroutine(String) Timemanager:Update() (at Assets/ScriputsUI/Timemanager.cs:41) ```C# ```ここに言語を入力 コード public class Timemanager : MonoBehaviour { [SerializeField] Sprite[] Sprites; [SerializeField] Image[] Images; int minutes; int seconds_10;//秒数10桁 int seconds_1;//秒数1桁 [SerializeField] int total; //制限時間 // Use this for initialization void Start() { //下記は別のエラーによりコメントアウトしております。 //Instantiate(Resources.Load("Digital/TimePng/")); Sprites = Resources.LoadAll<Sprite>("SpriteUI/Digital/"); Sprites = new Sprite[10]; total = minutes * 60+(seconds_10+seconds_1); } // Update is called once per frame void Update () { //時間を計測 total = minutes * 60 + (seconds_10 + seconds_1); StartCoroutine("TimeStart"); } //経過時間の数値を文字型として取り、 //文字列の値をイメージ配列の要素数と組み合わせる void SetNumber(int min,int val1,int val2 ,int val3) { string str = string.Format("{0:00}", min);//第一引数を文字型に変換 //(引数内訳:val1=分・val2=10秒単位・val3=一秒単位)//それぞれ第一引数から指定の文字列を引き抜く Images[val1].sprite = Sprites[Convert.ToInt32(str.Substring(0, 1))];//0番目1文字 Images[val2].sprite = Sprites[Convert.ToInt32(str.Substring(1, 1))];//1番目1文字 Images[val3].sprite = Sprites[Convert.ToInt32(str.Substring(2, 1))]; } //文字列関数で使った引数を変更経過時間ごとに変更する IEnumerator TimeStart() { while (total >= 0) { //分単位をSetNumber関数にminutesを渡す minutes = Mathf.FloorToInt(total - (seconds_1 + seconds_10)) / 60; SetNumber(minutes, 4, 9, 9); //10秒単位 〃 seconds_10 =Mathf.FloorToInt( total % 60) ; SetNumber(seconds_10, 4, 9, 9); //1秒単位 seconds_1 =Mathf.FloorToInt( minutes % 60); SetNumber(seconds_1, 4, 9, 9); total -= (int)Time.deltaTime; yield return new WaitForSeconds(1.0f); }
試したこと
配列の上限を超えた様子?なので
上記のコードMathf.FloorToIntをつかった数式に変えてみました。
結果は変わらずでした。
私としては、数式が原因だと考えておりますが、
どう改善すればいいか分からない状態です。
改善策となるヒント、その他、原因となるコードがありましたら
ご教授の程、よろしくお願い申し上げます。
補足情報(FW/ツールのバージョンなど)
Unity 2017.4.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/20 04:41
2018/06/20 08:15