В функции `OnTriggerExit2D` вы пытаетесь удалить элемент из списка `enemes`, но сразу же обращаетесь к этому списку без проверки на пустоту. Следует добавить проверку на то, что список `eneme`s не пуст, перед обращением к элементам этого списка.
По поводу ошибки `ArgumentOutOfRangeException`: возникает она, когда вы пытаетесь обратиться к элементу списка по индексу, который выходит за пределы размера этого списка. Например, если у вас есть список из трех элементов, то допустимые индексы будут от 0 до 2. При обращении к элементу с индексом 3 будет возникать ошибка.
Чтобы исправить эту ошибку, нужно проверять, что список `enemes` не пуст и что индекс, по которому вы обращаетесь к элементу, находится в допустимом диапазоне. В функции `PlayerVision` нужно проверять, что список `enemes` не пуст перед тем, как обращаться к элементам этого списка. Например, так:
if (enemes.Count > 0) {
target = enemes[0];
Distance = Vector3.Distance(enemes[0].transform.position, transform.position);
SeeEnemy = true;
if (enemes.Count >= 2)
for (int i = 1; i != enemes.Count; i++)
if (Vector3.Distance(enemes[i].transform.position, transform.position) < Distance) {
Distance = Vector3.Distance(enemes[i].transform.position, transform.position);
target = enemes[i];
}
}
В функции `OnTriggerExit2D` также стоит добавить проверку на то, что список `enemes` не пуст, перед обращением к элементам этого списка. Например, так:
if (other.tag == "Enemy")
{
enemes.Remove(other.gameObject);
if (enemes.Count == 0) {
transform.parent.gameObject.GetComponent().NoTarget();
} else {
transform.parent.gameObject.GetComponent().PlayerVision(enemes);
}
}
Проверьте также, что вы правильно указали тег "Enemy" у вражеских объектов, чтобы условие `if (other.tag == "Enemy")` выполнялось только при встрече с врагами.