Во-первых,
Я вижу, что вы порождаете вещи в цикле for и каждый раз перезаписываете переменную vialss
:
for (int i = 0; i < numOfVials; i++)
{
vialss = Instantiate(vialOfBlood,
SpawnPosition(),
Quaternion.identity) as GameObject;
}
А затем, при столкновении, выУничтожаем vialss
, который в этом случае будет последним порожденным объектом.И если после 1 столкновения вы столкнетесь с чем-либо, vialss
будет уже удалено и, вероятно, выдает исключение.Может быть, это нормально в вашей игре, но логика выглядит несколько некорректной.
Кроме того, я предполагаю, что вы хотите уничтожить объект, с которым сталкиваетесь?Разве что-то подобное не работает?
void OnTriggerEnter(Collider col)
{
if (col.gameObject.tag == "vials")
{
Destroy(col.gameObject); // <== Remove colliding object
Debug.Log("yell");
}
}
Если вам по какой-то не связанной причине нужен список всех ваших порожденных флаконов, возможно, вы захотите вместо этого преобразовать его в список:
List<GameObject> spawnedVials = new List<GameObject>();
void SpawnVials()
{
for (int i = 0; i < numOfVials; i++)
{
var vial = Instantiate<GameObject>(vialOfBlood,
SpawnPosition(),
Quaternion.identity)
spawnedVials.Add(vial);
}
}
Наконец,
убедитесь, что обнаружение столкновений работает.Вы говорите, что скрипт прикреплен к вашей камере.пожалуйста, убедитесь, что у вас есть коллайдер на камеру.Но вы говорите, что другие коллайдеры работают, так что, я думаю, у вас все под контролем.
Я предполагаю, что ваша проблема заключается в некорректной логике, которую я первоначально описал.