Почему при спавне объекта в Юнити он не отображается, но появляется?
Есть несколько заданных координат и мне нужно, чтобы объект рамдомно спавнился на одной из них. Я реализовал это так (скрины). Все работает как бы, когда я нажимаю F объекты появляются слева, но не появляются в самой игре, только если переключаться на меню сцены, там они появляются как надо, да и когда я нажимаю F чтобы заспавнить объект, вылетает ошибка:
IndexOutOfRangeException: Index was outside the bounds of the array.
RandomSpawn.SpawnRandom () (at Assets/Scripts/RandomSpawn.cs:26)
RandomSpawn.Update () (at Assets/Scripts/RandomSpawn.cs:19)
Я погуглил, как ее решить и много чего нашел, но у меня должно быть все правильно. Помогите пожалуйста в решении данного вопроса, ибо я не понимаю.
Мой код:
public Transform[] listObjects;
public GameObject Coin;
int random;
void Update () {
if (Input.GetKeyUp(KeyCode.F)) {
random = Random.Range(0, listObjects.Length);
spawnRandom();
}
}
private void SpawnRandom () {
Instantiate(Coin, listObjects[random].position, Quaternion.idenity);
}
}
Ответы (1 шт):
Нумерация массива начинается с нуля. В массиве из 5 элементов индексы элементов 0,1,2,3,4.
Строкой random = Random.Range(0, listObjects.Length); вы переменной random присваете значение от 0 до 5 включительно! Так как в C# в отличии от некоторых других языков функция Random.Range возвращает значение от минимального включительно до максимального включительно.
Строка из документации:
Return a random float number between min [inclusive] and max [inclusive]...
И сама документация
Таким образом, чтобы не брать 5-й элемент массива (хотя последний элемент - 4-й), вы должны исправить на:
random = Random.Range(0, listObjects.Length - 1);
P.S. Массив из 5 элементов - просто пример


