Почему i вылетает за пределы индексов? Юнити 2д, C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class spark : MonoBehaviour
{
public GameObject[] ropes = new GameObject[5];
private int i = 0;
void Start ()
{
i++;
}
void Update ()
{
transform.position = Vector2.MoveTowards(transform.position, ropes[i].transform.position, 1f);
if (transform.position == ropes[i].transform.position && i<5)
{
Destroy(ropes[i - 1]);
i++;
}
}
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Надо сначала проверять i < 5 и только потом все остальное. А так, представьте, что i == 5, и вы обращаетесь к ropes[i].transform.position, то есть пытаетесь взять шестой элемент массива, которого нет. Вот и вылетает.
А лучше вообще проверять ropes.Length, а то поменяете длину массива, и потом придется везде пятерки на шестерки или еще на что другое менять. Поэтому нужно стараться не использовать литералы типа 5 там, где это можно не делать.
public class spark : MonoBehaviour
{
public GameObject[] ropes = new GameObject[5];
private int i = 0;
void Start ()
{
}
void Update ()
{
if (i < ropes.Length)
{
transform.position = Vector2.MoveTowards(transform.position, ropes[i].transform.position, 1f);
if (transform.position == ropes[i].transform.position)
{
Destroy(ropes[i]);
i++;
}
}
}
}