Найти GameObjects с ключевым словом Unity

Как я могу найти GameObjects с ключевым словом в Unity?

На самом деле, у меня есть много GameObject с такими именами:

  • Бетонный пол [289483]
  • Бетонный пол [289487]
  • Часть стены [293291]
  • Деталь [321043]
  • ...

Я уже сделал функции для получения идентификатора объекта (в квадратных скобках []), потому что это важная часть имени GameObject.

ID должен быть уникальным, но я не уверен!

Теперь я хотел бы иметь функцию с этим прототипом:

public static GameObject[] getObjectsWithIdentifier(int identifier)

Он вернет все объекты, которые имеют идентификатор, указанный в параметре. Так что это как функция поиска.

GameObject.Find(name), я так понимаю, сделать поиск только по точному названию объекта.

Спасибо за вашу помощь !


person Dean    schedule 23.04.2015    source источник


Ответы (2)


Я думаю, вы имеете в виду что-то вроде тега GameObject?

http://docs.unity3d.com/ScriptReference/GameObject.FindGameObjectsWithTag.html

Это все еще использует прямые строки, но это не имя GameObject, поэтому оно немного более управляемо. Вы можете назначать теги для GameObjects и чаще всего через Prefab.

http://answers.unity3d.com/questions/54040/can-i-get-a-tags-element-number.html

Это демонстрирует, что для преобразования тега Unity3d в тип int/enum вам придется управлять этим самостоятельно. Но это должно быть довольно просто, используя словарь или что-то в этом роде.

person Atra Viator    schedule 23.04.2015
comment
Это означает, что я должен перебрать все свои объекты и присвоить им идентификатор тега в функции start(), и тогда я смогу использовать FindGameObjectsWithTags()? Я легко могу иметь много GameObjects в своей сцене, поэтому я надеялся, что есть лучший способ сделать это! - person Dean; 23.04.2015
comment
Это зависит. Если вы создаете так много объектов, я предполагаю, что вы создаете их экземпляры во время выполнения? Вы можете установить тег на объект через Инспектор в верхней левой части. Если вы установите тег для префаба, все созданные объекты будут иметь тег, который вы изначально установили, что является методом наилучшей практики. Назначение тегов во время выполнения, на мой взгляд, является плохой практикой. - person Atra Viator; 23.04.2015
comment
На самом деле я импортирую модели из файлов .fbx. Возможно, мне придется импортировать FBX во время выполнения, потому что я могу в конечном итоге импортировать многие из них и выполнять автоматическую обработку по мере их импорта. Но пока я просто импортирую пример fbx вручную внутри инспектора. - person Dean; 23.04.2015

Наконец, это решение, которое я придумал.

Это то, что я сделал, конечно, это итерация, но я думаю, что создам исходный глобальный массив только один раз при первом использовании функции.

public static Object[] findObjectsFromIdentifier(int identifier) {
    Object[] objects = GameObject.FindObjectsOfType( typeof( GameObject ) );
    return objects.Where( obj => getIdentifierFromObject( obj ) == identifier ).ToArray();
}
person Dean    schedule 23.04.2015