Unity3D C# - получение типа скрипта - PullRequest
1 голос
/ 09 февраля 2020

Итак, я создал систему размещения для размещения объектов на сетке, у меня есть сетка, и размещение все работает, моя проблема - я пытаюсь создать «призрачный» объект, который существует во время размещения, но на самом деле это не так. В любом случае, моя проблема в том, что я пытаюсь найти способ уничтожить / деактивировать любые и ВСЕ "СКРИПТЫ", прикрепленные к любому дочернему объекту объекта-призрака, поэтому ни один из них не работает. Но я не могу понять, что такое System.Type скрипт. Кто-нибудь знает?

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Звоните:

gameobject.GetComponents(typeof(Component));

Это вернет все компоненты. Осторожно с компонентами Unity по умолчанию: Transform, Me sh ... тип можно определить с помощью is или IsInstanceOfType или component.GetType () для разыграть объекты Компонента, если это необходимо.

0 голосов
/ 12 февраля 2020

Использование 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);
         }
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...