Проблема:
Я получаю ошибку ArgumentOutOfRangeException при попытке получить случайный элемент из списка после перебора массива.
Цель:
Я пытаюсь активировать случайный дочерний игровой объект внутри родительского игрового объекта путем поиска тегов. Внутри родительского объекта есть несколько дочерних игровых объектов. Если этот игровой объект помечен тегом, который я ищу, я хочу выбрать его и добавить в новые списки на основе его тега. Затем, после итерации этого массива, я хочу получить случайный элемент для каждого из этих новых списков и установить его активным
[SerializeField] private List<Transform> heads = new List<Transform>();
[SerializeField] private List<Transform> bodys = new List<Transform>();
[SerializeField] private List<Transform> arms = new List<Transform>();
[SerializeField] private Transform[] bodyParts;
private GameObject head;
private GameObject backpack;
private GameObject arm;
void Start()
{
bodyParts = this.gameObject.GetComponentsInChildren<Transform>();
for (int i = 0; i < bodyParts.Length; i++)
{
switch (bodyParts[i].tag)
{
case "Head":
heads.Add(bodyParts[i]);
break;
case "Arm":
arms.Add(bodyParts[i]);
break;
case "Backpack":
backpacks.Add(bodyParts[i]);
break;
default:
Debug.Log("Not relevant");
break;
}
}
SetActiveBodyPart(heads, head);
SetActiveBodyPart(arms, arm);
SetActiveBodyPart(backpacks, backpack);
}
void SetActiveBodyPart(List<Transform> whichBodyParts, GameObject whichBodyPart)
{
if (whichBodyParts != null)
{
whichBodyPart = whichBodyParts[Random.Range(0, whichBodyParts.Count)].gameObject;
if (!whichBodyPart.activeSelf)
{
whichBodyPart.SetActive(true);
}
}
else Debug.Log("Nothing here...");
}
Я получаю сообщение об ошибке в этой строке:
whichBodyPart = whichBodyParts [Random.Range (0, whichBodyParts.Count)]. GameObject;
Когда я вручную деактивирую все свои дочерние игровые объекты внутри родителя и запускаю игру, эти списки в редакторе Unity возвращают 0, но я ожидаю, что на выходе будут положительные целые числа