Здесь вы получаете встроенную в Unity специальную форму NullReferenceException
, просто после уничтожения ссылки в Unity на самом деле не null
, но все же хранит некоторую информацию, например , почему этоis null
.
Так что проверка currentShips != null
ничего не делает, так как отсюда не происходит исключение. Вероятно, это скорее в строке
Destroy(obj.gameObject);
, где obj
уже был уничтожен!
Актуальная проблема уже упоминалась в комментариях Кей, а также в удаленном ответе. по Adriani6:
shipParent.GetComppnentsInChildren<Transform>()
включает компонент Transform
самого объекта shipParent
!!
Возвращает все компоненты типа type
в GameObject
или любом из его дочерних элементов.
Кроме того, наиболее вероятно, что shipParent
* Transform
является самым первым из найденных иразрушен! Поэтому в следующей итерации все дочерние элементы obj
уже также помечены как уничтоженные.
Вместо этого следует использовать
foreach (Transform obj in shipParent.transform)
{
Destroy(obj.gameObject);
}
этот встроенный итератор перечисления для Transform
Тип делает именно то, что вы ожидаете: Возвращает все ссылки детей первого уровня Transform
.