Использование gameobject.GetComponent(typeof(Component));
вернет все компоненты, прикрепленные к игровым объектам, но не все дочерние компоненты. Тем не менее, есть способ, которым вы можете получить все компоненты для всех дочерних пользователей gameObject.GetComponentsInChildren(typeof(Component));
, но я не рекомендую использовать Component
, вместо этого вы должны использовать MonoBehaviour
, используя этот тип, вы получите только те компоненты, которые непосредственно получены из MonoBehaviour
, которые также включают ваши скрипты. После этого вы можете проверить . (Точка) , так как почти все встроенные компоненты Unity находятся в пространстве имен UnityEngine
. И Object.GetType()
вернет тип в следующем формате namespace.ObjectType
.
Здесь, если вы проверите индекс . (Точка) , если данный тип включает в себя . (Точку) , он вернет свою позицию. Если . (Точка) не существует в строке, он вернет -1
. Проверяя -1
, мы можем убедиться, что компоненты не находятся ни в каком пространстве имен и могут быть уничтожены. Я надеюсь, что вы поняли то, что я пытаюсь сказать, если нет, просто посмотрите фрагмент кода ниже, и вы поймете, как это сделать.
Component[] c = ghost.GetComponentsInChildren(typeof(MonoBehaviour));
foreach(Component cmp in c)
{
if(cmp.GetType().ToString().IndexOf('.') <= -1)
{
Destroy(cmp);
}
}