Как уничтожить определённые объекты в иерархии, не трогая другие?

В Unity есть несколько способов уничтожить определённые объекты в иерархии, не затрагивая другие.

1. По тегам. Можно присвоить объектам, которые вы хотите уничтожить, уникальный тег. Затем, используя функцию GameObject.FindGameObjectsWithTag(), вы можете получить список всех объектов с определённым тегом. После этого вы можете пройти через этот список и уничтожить каждый объект с помощью функции Destroy().

// Найти объекты с определённым тегом и уничтожить их
GameObject[] objectsToDestroy = GameObject.FindGameObjectsWithTag("MyTag");
foreach (GameObject obj in objectsToDestroy)
{
    Destroy(obj);
}

2. По имени. Если объекты, которые вы хотите уничтожить, имеют уникальные имена, вы можете использовать функцию GameObject.Find() для поиска каждого объекта по имени и затем уничтожить их с помощью функции Destroy().

// Найти объекты с определённым именем и уничтожить их
GameObject objToDestroy = GameObject.Find("MyObjectName");
Destroy(objToDestroy);

3. Используйте рекурсивную функцию. Если ваши объекты находятся в определённой иерархии, вы можете использовать рекурсивную функцию для обхода всех объектов в этой иерархии и уничтожить только нужные. Для этого вам понадобится проверить, соответствует ли каждый объект вашим условиям, и рекурсивно вызвать эту же функцию для всех дочерних объектов.

// Рекурсивная функция для уничтожения определённых объектов в иерархии
private void DestroyObjects(Transform parent)
{
    for (int i = parent.childCount - 1; i >= 0; i--)
    {
        Transform child = parent.GetChild(i);
        // Если объект соответствует вашим условиям, уничтожьте его
        if (ShouldDestroyObject(child))
        {
            Destroy(child.gameObject);
        }
        else
        {
            // Рекурсивно вызвать эту же функцию для дочерних объектов
            DestroyObjects(child);
        }
    }
}

// Пример использования
DestroyObjects(transform);

Независимо от выбранного способа, имейте в виду, что при уничтожении объектов, которые имеют компоненты или другие зависимости, возможны ошибки и нестабильное поведение в вашей сцене или игре. Убедитесь, что вы предварительно сохраните необходимую информацию или выполните все необходимые операции перед уничтожением объектов.