Перейти к содержимому

Unity как удалить все дочерние объекты

  • автор:

The Hierarchy window

The default Hierarchy window view when you open a new Unity projectThe default Hierarchy window view when you open a new Unity project

The Hierarchy window displays every GameObject The fundamental object in Unity scenes, which can represent characters, props, scenery, cameras, waypoints, and more. A GameObject’s functionality is defined by the Components attached to it. More info
See in Glossary in a Scene, such as models, Cameras, or Prefabs An asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. More info
See in Glossary . You can use the Hierarchy window to sort and group the GameObjects you use in a Scene. When you add or remove GameObjects in the Scene view, you also add or remove them from the Hierarchy window.

The Hierarchy window can also contain other Scenes, with each Scene A Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary containing their own GameObjects.

Parenting

Unity uses the concept of parent-child hierarchies, or parenting, to group GameObjects. An object can contain other GameObjects that inherit its properties.You can link GameObjects together to help move, scale, or transform a collection of GameObjects. When you move the top-level object, or parent GameObject, you also move all child GameObjects.

You can also create nested parent-child GameObjects. All nested objects are still descendants of the original parent GameObject, or root GameObject.

Child GameObjects inherit the movement and rotation of the parent GameObject. To learn more about this, see documentation on the Transform component A Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform. More info
See in Glossary .

 Child 1 and Child 2 are the child GameObjects of Parent. Child 3 is a child GameObject of Child 2, and a descendant GameObject of Parent.Child 1 and Child 2 are the child GameObjects of Parent. Child 3 is a child GameObject of Child 2, and a descendant GameObject of Parent.

Organize GameObjects

Create new GameObjects

To create a new GameObject in the Hierarchy window:

  1. Right-click on empty space in the selected Scene.
  2. Select the GameObject you want to create.

You can also press Ctrl+Shift+N (Windows) or Command+Shift+N (macOS) to create a new empty GameObject.

Note: New GameObjects are created in “rename” mode automatically. To disable this behavior, select the More (⋮) menu in the Hierarchy window and deselect Rename New Objects.

Toggle child GameObject visibility

To toggle the visibility of child GameObjects:

  1. Select the drop-down arrow (►) to the left of the parent GameObject.
  2. Press Alt while clicking the drop-down arrow (►) to toggle visibility of all descendant GameObjects of the root GameObject.
  3. Select the drop-down arrow again (▼) to collapse all descendant GameObjects.

Create child GameObjects

To create a child GameObject:

  • Drag the GameObject onto the parent GameObject in the Hierarchy.

Create parent GameObjects

You can add a new GameObject into the Hierarchy view as the parent of existing GameObjects.

To create a parent GameObject:

  1. Right-click a GameObject, or select multiple GameObjects on the same level and right-click.
  2. Select Create Empty Parent.

You can also press Ctrl+Shift+G (Windows) or Command+Shift+G (macOS) to create a parent GameObject.

Note: If you have set a default parent GameObject, Create Empty Parent creates the new GameObject as a child of the default parent, not as the parent of the selected GameObjects.

Create sibling GameObjects

A sibling GameObject is a GameObject with the same hierarchy as another child GameObject. To create a sibling GameObject:

  1. Drag the GameObject above or below an existing GameObject.
  2. Use the horizontal blue line to determine the order of the GameObject.

Duplicate GameObjects

To duplicate GameObjects, right-click the target GameObject and select Duplicate.

You can also press Ctrl+D (Windows) or Command+D (macOS) to duplicate the selected GameObject.

Paste GameObjects as child

You can cut or copy a selected GameObject and then paste it as a child of another GameObject. Pasted child GameObjects keep their world position.

To paste a GameObject as child:

  1. Right-click the selected GameObject, and then select Cut or Copy.
  2. Right-click the intended parent GameObject, and then select Paste as Child.

You can also press Ctrl+Shift+V (Windows) or Command+Shift+V (macOS) to paste a GameObject as a child.

Organize GameObjects with default parent

You can make any GameObject in the Hierarchy window a “default parent”. When you drag a GameObject into the Scene view, Unity automatically makes this GameObject the child of the GameObject you set as the default parent.

To make a GameObject a default parent:

  1. In the Hierarchy window, right-click on the GameObject.
  2. Select Set as Default Parent.

When you drag a GameObject into the Scene view, in the Hierarchy window, the child GameObject is indented below the default parent GameObject. The name of the default parent GameObject is bold.

In this image, the Cube GameObject is the default parent. When the user drags the Car GameObject into the Scene view, Unity automatically makes it the child of the Cube GameObject.In this image, the Cube GameObject is the default parent. When the user drags the Car GameObject into the Scene view, Unity automatically makes it the child of the Cube GameObject.

To remove default parent status from a GameObject:

  1. In the Hierarchy window, right-click on the GameObject.
  2. Select Clear Default Parent.

The name of the GameObject that was previously the default parent is no longer bold. When you drag a GameObject into the Scene view, it appears at the top level in the Hierarchy window. In other words, Unity does not make this GameObject the child of the GameObject that was previously the default parent.

In this image, no GameObjects in the Hierarchy window are set as the default parent. When the user drags the Car GameObject into the Scene view, Unity adds it at the top level of the hierarchy.In this image, no GameObjects in the Hierarchy window are set as the default parent. When the user drags the Car GameObject into the Scene view, Unity adds it at the top level of the hierarchy.

You can only set one default parent per Scene. In the Hierarchy window, if you set a GameObject as the default parent, and then you make a different GameObject in the same Scene the default parent, only the second GameObject is the default parent.

If you have multiple Scenes in the Hierarchy window, and you set default parents in each Scene, when you drag a GameObject into the Scene view, Unity makes the default parent GameObject in the active Scene the parent of the new GameObject.

In this image, the Cube GameObjects in both Scene1 and Scene2 are set as default parents. Unity sets the Cube in Scene1 as the parent of the Car GameObject, because Scene1 is the active Scene.In this image, the Cube GameObjects in both Scene1 and Scene2 are set as default parents. Unity sets the Cube in Scene1 as the parent of the Car GameObject, because Scene1 is the active Scene.

You can set a keyboard shortcut for the default parent setting in the Shortcuts manager. On the Shortcuts window, assign a keyboard shortcut to Hierarchy View > Set as Default Parent. If there is no default parent set, and in the Hierarchy window you select a GameObject, use the shortcut to make this GameObject the default parent. When a default parent is set, use the shortcut to remove default parent status from any GameObject that has it.

Set Scene visibility and pickability

Click the Scene visibility icon to hide and show GameObjects in the Scene view An interactive view into the world you are creating. You use the Scene View to select and position scenery, characters, cameras, lights, and all other types of Game Object. More info
See in Glossary without changing their in-application visibility.

Select the Scene picking icon to toggle the ability to select GameObjects in the Scene view while you are editing.

These controls are useful for working with large or complex Scenes where it’s difficult to view and select specific GameObjects.

Scene visibility icons/toggles

For more information, see the documentation on Scene visibility and Scene picking.

Sort GameObjects

By default, the Hierarchy window lists GameObjects in the order they’re created. You can drag the selected GameObject up or down in the Scene to change the order of the GameObjects.

Alphanumeric sorting

To sort GameObjects in alphanumeric order:

  1. Select Edit > Preferences (Windows) or Unity > Preferences (macOS).
  2. Select Enable Alphanumeric Sorting.

When selected, an icon appears in the Hierarchy window that allows you to toggle between Transform sorting (the default value) or Alphabetical sorting.

Multi-Scene editing

You can have more than one Scene open in the Hierarchy window at the same time. For more information, see the Multi Scene Editing page.

Override indicator

When you edit a Prefab instance in a Scene, Unity displays a indicator next to the parent GameObject in the hierarchy. This indicator highlights any Prefab that has non-default override values in any of its child GameObjects. To open the Overrides dropdown directly from the Hierarchy window click on the override indicator. The override indicator appears as a blue line in the left side of the margin and is identical to the instance override in the Inspector A Unity window that displays information about the currently selected GameObject, asset or project settings, allowing you to inspect and edit the values. More info
See in Glossary window. For more information, see Instance overrides.

Unity как удалить все дочерние объекты

Как перебрать и уничтожить всех дочерних элементов игрового объекта в Unity?

У меня есть следующий скрипт, который прикреплен к игровому объекту и запускается, когда я нажимаю кнопку в редакторе:

Он показывает, что исходное значение childCount равно 13, а окончательное значение — 6. Кроме того, если я распечатываю все i на каждой итерации, я вижу значения 0-6, показывающие, что цикл выполняется только 7 раз, не 13, как ожидалось.

Как я могу удалить всех дочерних элементов, чтобы окончательное значение было 0? Для справки, дети, которых я пытаюсь удалить, были автоматически созданы сценарием поставщика. Я также запускаю этот сценарий в [ExecuteInEditMode] , чего он стоит.

Следующий сценарий имеет такое же поведение; если childCount начинается с 4, то заканчивается на 2:

Если я попробую следующее, я получаю сообщение об ошибке времени выполнения, указывающее на строку foreach с надписью «InvalidCastException: невозможно преобразовать исходный тип в целевой» .

Как в unity удалить некоторое количество дочерних объектов?

Нужно удалить некоторое определенное количество случайных дочерних объектов(Например из 500 осталось чтоб 50). Пишу так:

Ничего не удаляется. Пишу так:

  • Вопрос задан более двух лет назад
  • 754 просмотра
  • Facebook
  • Вконтакте
  • Twitter

MrMureno

наверно придется вам выкладывать мини проектик — который можно позапускать.
так на вид — код более менее адекватный, кроме момента «а что если target отрицательный??»

вот меньше 50 child)) — будете получать бесконечный цикл.

условие сделали бы
while (target>0)
а в цикле после Destroy
target—;

не стартовало бы цикл, если чаилдов недостаточно, и вообще прозрачнее все это было.

еще предложил бы без рандома, просто удалить таким циклом, чтоб убедится в работоспособности)
а так отладчик вам в руки — и смотреть чему равны переменные и почему ничего не удаляется))

Скрипты в Unity3D. Урок 0. Основы

Два основных компонента у объекта в Unity3D — это Transform и GameObject.

GameObject

GameObject — основа, контейнер, который содержит в себе все компоненты любой объект в Unity3D. Чтобы удалить, к примеру, игровой объект — удалять нужно именно GameObject этого объекта. Для доступа к GameObject — используется переменная, которая присутствует по умолчанию в любом скрипте, унаследованном от MonoBehaviour (то есть в любом скрипте, созданном через Unity3D).

Получение ссылки на игровой объект

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

Уничтожение игрового объекта

Данным способом можно удалить игровой объект.

Активация/деактивация игрового объекта

Деактивация объекта аналогична снятия галочки инспекторе Unity3D, которая обведена красным цветом на скриншоте ниже.

ul0_setActiveFalse

Деактивация элемента деактивирует также все его дочерние объекты и останавливает выполнение в их скриптов.

Добавление новых компонентов и скриптов игровому объекту

Таким образом можно добавить абсолютно любой компонент, либо скрипт, который можно добавить в редакторе Unity3D.

Получение доступа к компоненту игрового объекта

Таким же образом можно получить доступ к любому компоненту игрового объекта.

Переименование игрового объекта. Считывание имени объекта
Сделать объект статичным

Данный код аналогичен установке/снятию галочки в редакторе Unity3D (на скрине ниже).

ul0_setStatic

Установить слои игровому объекту, а также считать их
Установить тэг игровому объекту, а также его считывание

Transform

С трансформом всё немного проще — этот компонент не является основой, но тем не менее — является основной и, главное, неотъемлемой частью GameObject’а. Он отвечает за месторасположение объекта на сцене, его «вращении», размерах, а также содержит информацию о дочерних и родительском объектах.

Это единственные компонент, который невозможно удалить из GameObject.

Изменение положение объекта

За положение объекта на сцене отвечает элементы transform.position и transform.localPosition.

Они оба являются переменной типа Vector3 и имеют в себе 3 главных составляющих x,y и z, которые соответствуют координатам в трехмерном пространстве. Следует учитывать, что x, y и z невозможно менять напрямую — они только для чтения. Чтобы добавить единичку к x — нужно добавить к самому transform.position новый Vector3, который равен (1,0,0), что добавить к x единицу, а к y и z — нули.

Чем же отличаются transform.position и transform.localPosition?

Их главное (и единственное отличие) заключается в том, что position — показывает и принимает координаты объекта, относительно мировых координат, а localPosition — относительно родительского объекта. Если же игровой объект является «корневым», то есть у него нет родительских объектов, то position и localPosition будут равны.

Движение объекта

Сначала рассмотрим элементарные варианты.

Как мы уже говорили — position (буду далее использовать именно его, так как отличия от localPosition только в том, относительно чего эти координаты) является переменной типа Vector3. Поэтому для его изменения нужно либо прибавить к нему другой вектор, либо вычесть другой вектор, либо заменить его другим вектором.

Рекомендуется использовать функцию transform.Translate.

Это уже не переменная, как transform.position — это функция. У неё есть два входящих параметра:

  1. Vector3, который отвечает за то, в каком направлении будет двигаться объект;
  2. Space.Self/Space.World — то, относительно чего будет двигаться игровой объект. Space.Self — аналогичен transform.localPosition, а Space.World — аналогичен transform.position.

Вращение объекта

За вращение объекта отвечает компонент transform.rotation, transform.localRotation и функция transform.Rotate.

Здесь все аналогично transform.position. Кроме одного, несмотря на то, что в редакторе Unity3D Rotation представляет собой Vector3, то есть вращение относительно оси X, оси Y, оси Z. Но в коде оно представлено в виде кватернионов. Что такое кватернион — отдельная история. И обычно её изучают в вузах. По факту — знание кватернионов не обязательно для разработки игр. К счастью разработчики Unity3D это понимают и сделали две удобные для программистов вещи:

  1. Функция transform.Rotate(Vector3 vector, Space.World(либо Self));
  2. Функция Quaternion.Euler(float x,float y,float z), которая как раз возвращает кватернион;

Меньше слов — больше кода:

Вместо rotation можно применять localRotation, аналогично position.

Такой подход аналогичен transform.Translate и также является более производительным.

Поиск других объектов на сцене

Есть два подхода поиска объекта на сцене.

  1. GameObject.Find(«имяОбъекта»); Он же «пушка по воробьям». Несмотря на кажущуюся скорость — метод является достаточно прожорливым и при частом использовании на большой сцене может стать большой проблемой. Однако он же самый простой способ (хотя и ненадежный). А ненадежный он потому, что редактор Unity3D позволяет давать одинаковые имена объектам. А GameObject.Find возвращает только один элемент, который он найдет первым.
  2. transform.FindChild(«имяДочернегоОбъекта») — функция возвращает переменную типа transform нужного объекта. Для доступа к GameObject этого объекта особых усилий прилагать не нужно, так как ссылка на него уже содержится в transform (как и ссылка на transform содержится в GameObject’е).

Также можно запрашивать дочерние элементы по их номеру:

Также дочерний элемент может запросить родительский, а также родительский родительского и так далее:

В следующих статьях будет информация о том, что такое private, public, static, отправление сообщений игровым объектам.

12 комментариев для “Скрипты в Unity3D. Урок 0. Основы”

Отличный урок! Планируется ли продолжение?

Здравствуйте! Да, продолжение планируется и уже есть заготовки, но времени, увы, нет совсем =(

Присоединяюсь к предыдущем комментатору, очень жду продолжения.
Ну и отдельное спасибо за этот урок.

var objectBoxCollider = gameObject.GetComponent();
ещё бы растолковать,нубу ,почему, где, и в каком случае слова пишутся с маленькой и большой буквы.
Типа — функции с маленькой, переменные с большой.
Почему object с маленькой а BoxCollider c большой.
И краткие примеры, как эти коды можно в коде применять..
//и кто такой «anotherTransformLink»
var anotherTransformLink = childGameObject.transform;

И коментарии бы типа:
var childTransform = transform.FindChild(«myChild1»); // находим myChild1 помещаем в childTransform
var childGameObject = childTransform.gameObject; // тут что происходит я хрен чё понимаю откуда что берётся
var anotherTransformLink = childGameObject.transform; // и зачем столько букав

А так-то нормуль, есть что законспектировать.

Здравствуйте! Спасибо за советы, я обязательно их учту при написании следующих статей.
Постараюсь вкратце ответить на ваши вопросы.
1) Слова в коде относятся к командам, классам, интерфейсам, или именам переменных. Обычно в C# с большой буквы пишется класс, интерфейс, или переменная с модификатором доступа ‘public’ (не забываем про функции). Где, как и в каких случаях что используется тяжело описать, так как это основы языка программирования C#.
Например:
var myObject = new MyObject().
Конкретно в данном случае — MyObject — это класс. А myObject — это конкретный экземпляр класса MyObject.

А вот другой пример:
public GameObject MyGameObject;
Это публичное свойство класса типа GameObject. Сам экземпляр данного класса называется MyGameObject и может быть доступен как и изнутри самого класса, так и из других классов, у которых есть ссылка на данный экземпляр класса.

2) Почему objectBoxCollider с маленькой, а BoxCollider с большой? ObjectBoxCollider — это имя класса, а objectBoxCollider — это его экземпляр..

К тому же Unity3d очень активно использует наследование (хотя бы взять любой скрипт — он наследован от MonoBehavior. Нужно знать как работает наследование и какой базовый функционал (и какие свойства) уже доступны «из коробки» у любого класса, который будет наследован от него.
Всё-таки Unity3D подразумевает, что у разработчика есть базовые знания C#, или JS. Я бы вам порекомендовал вначале почитать статьи с замечательного сайта https://metanit.com/sharp/tutorial/
Лучше чем там я объяснить всё равно не смогу ��

оО, о как, очень рад что сайт живой,ато вновь и вновь прочёсываю инет своими тегами, гляжу — котодомик))
думаю — та-ак, помню что там чтото полезное было пойду ещё загляну) а тут опаньки, живая планета,.
только вот пользователи сетей видать не очень жалуют домен «рф» и встречается он редковато,
буду значит наблюдать за сайтом,по возможности единомышленников подтягивать,
пс
C#

transform.position += new Vector3(1,0,0); // добавляем к X единице (смещаем на единицу)
transform.position += new Vector3(1,0,2)*Time.deltaTime; // двигаем объект в реальном времени с установленными значениями
по осям х и z

int speed = 5;
void Start()
transform.position += new Vector3(speed,0,0)*Time.deltaTime;//движение по оси х с заданием параметра(скорости) через переменную speed
transform.position += new Vector3(1,0,1)*speed*Time.deltaTime;// движение по заданным осям со скоростью установленной переменной speed

вот типа того бы, с пояснениями и дальнейшим развитием их применения
ещё поподробней бы про кватернионы и ейлеры, каким образом кватернион вывести в вектор3
про ригидбоди — нет нигде информации, как ограничивать угол поворота по осям,матф.кламп
как использовать драг по разным осям с разным значением
гравитация и енерция их ограничения и направления,
почему объект в вертикальном положении может подвергаться гравитации а в горизонтальном уже нет..+-

45ˆ
подробного про get set не хватает с примерами, пишут что много чего можно делать, а примеров нет, даже въехать сложно как выжать из него пользу чтобы фантазия стартонула….
учил с++ по Шилдту,3 изд,(в с# (юнити) нету чтоле *и& ?(ссылки, указатели) что то не встречал в скриптах)
так вот чего там нехватает — примеров хотябы с кошками и блошками
тут ещё надо въехать в API, как спаять школьный мелок с мышкой и клавой
а так — ждём продолжения ,всё довольно доходчиво преподносится..

Спасибо за отзыв! Приятно! ��
Стараюсь поддерживать актуальность сайта по мере сил и возможности.

Отдельное спасибо за темы для новых статей.

Спасибо очень сильно помог, ещё раз большое спасибо.

есть vector3 как взять по нему gameObject?

Здравствуйте. К сожалению никак. Vector3 это структура данных, которая содержит информацию о точках X,Y,Z.
Vector3, как и Vector2 стоит рассматривать наравне с int, string, bool, float..

Например. Контейнер gameObject всегда содержит ссылку на компонент (обязательный) transform.
А transform содержит много свойств, отвечающих за позицию и размер объекта на сцене. Одно из свойств, как раз position — является Vector3.

Через любой компонент можно получить ссылку на gameObject, как и через gameObject можно получить ссылку на любой компонент, который данный gameObject содержит внутри себя.
Например: var boxCollider = gameObject.GetComponent ();
Но Vector3 не является компонентом в Unity3D.

Являются компонентами только те объекты, которые можно добавить к gameObject’у, используя графический интерфейс редактора Unity3D.

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

Здравствуйте! Большое спасибо за ваш отзыв ��
К сожалению сейчас нет особой возможности вести блог.
Но если у вас есть какие-то конкретные вопросы по Unity3D, то я могу с удовольствием на них ответить.

Unity как удалить все дочерние объекты

Как перебрать и уничтожить всех дочерних элементов игрового объекта в Unity?

У меня есть следующий скрипт, который прикреплен к игровому объекту и запускается, когда я нажимаю кнопку в редакторе:

Он показывает, что исходное значение childCount равно 13, а окончательное значение — 6. Кроме того, если я распечатываю все i на каждой итерации, я вижу значения 0-6, показывающие, что цикл выполняется только 7 раз, не 13, как ожидалось.

Как я могу удалить всех дочерних элементов, чтобы окончательное значение было 0? Для справки, дети, которых я пытаюсь удалить, были автоматически созданы сценарием поставщика. Я также запускаю этот сценарий в [ExecuteInEditMode] , чего он стоит.

Следующий сценарий имеет такое же поведение; если childCount начинается с 4, то заканчивается на 2:

Если я попробую следующее, я получаю сообщение об ошибке времени выполнения, указывающее на строку foreach с надписью «InvalidCastException: невозможно преобразовать исходный тип в целевой» .

Как в unity удалить некоторое количество дочерних объектов?

Нужно удалить некоторое определенное количество случайных дочерних объектов(Например из 500 осталось чтоб 50). Пишу так:

Ничего не удаляется. Пишу так:

  • Вопрос задан более трёх лет назад
  • 971 просмотр
  • Facebook
  • Вконтакте
  • Twitter

MrMureno

наверно придется вам выкладывать мини проектик — который можно позапускать.
так на вид — код более менее адекватный, кроме момента «а что если target отрицательный??»

вот меньше 50 child)) — будете получать бесконечный цикл.

условие сделали бы
while (target>0)
а в цикле после Destroy
target—;

не стартовало бы цикл, если чаилдов недостаточно, и вообще прозрачнее все это было.

еще предложил бы без рандома, просто удалить таким циклом, чтоб убедится в работоспособности)
а так отладчик вам в руки — и смотреть чему равны переменные и почему ничего не удаляется))

Русские Блоги

Unity3D разделяет дочерние объекты, чтобы освободить родительско-дочерние отношения / удалить дочерние объекты, также можно реализовать

Что касается прекращения родительско-дочерних отношений, сначала посмотрите на официальный код объяснения.

Дана официальная функция для разрыва отношений родитель-потомок.

Используйте официальную функцию DetachChildren (), чтобы написать простой рекурсивный алгоритм для разделения всех потомков родителя (включая потомков дочернего элемента). Через метод TransRelieve. Простая модификация этого метода также может удалить всех дочерних элементов, а именно изменить функцию DetachChildren () на Destroy (gameObject).

код показан ниже:

Интеллектуальная рекомендация
Меч относится к предложению + 43: количество N сиша + Java

Оригинальное название: бросить кубики на землю, все точки кости сталкиваются с точкой точки кости. Введите n, напечатали вероятность всех возможных значений. (6 сторон каждой кости, точки от 1 до 6) Р.

Введение в Python 4

функция ввода Использование функции Функция input () является функцией ввода. Функция input () — это функция ввода. Когда вы пишете вопрос в скобках функции, функция input () будет отображать вопрос в.

Основные операции в R 01

Повторите основную операцию секретной книги ниндзя языка R учителя Се Иихуэй.

Мастерство, создание американской легенды очистки воды

Мастера — это не только технические специалисты и квалифицированные мастера, которые могут решить некоторые практические проблемы в производстве и жизни, но также авангарды, которые могут руководить п.

курсы памяти Лу Feifei (а, понимать память понимания мозга)

Понимание памяти, что память? Понимание памяти, что память? 1 Понимание мозга 2 Что такое память Функция 3 Память 3.1 общие воспоминания путь 3.2 Факторы, влияющие на память 4 запоминающий материал Че.

Итерация по дочерним GameObject, GetComponentsInChildren — самый быстрый способ?

Как можно получить массив все дочерних и поддочерних объектов конкретного объекта?

К примеру, нужно сменить всем названия, можно конечно функцию рекурсивную использовать, но это имхо костыль, я всегда брал какой-то (любой) компонент и уже по нему обращался к объекту типа:

Есть ли ли способ лучше?

На удивление, ну ruSO эту тему еще не особо обсудили, так что распишу для будущих вопросов.

Связь родитель-потомок в Unity реализована через компонент Transform и только через него. Искать детей через другие компоненты — странная затея просто потому что Transform обязательно прикреплен к любому объекту типа GameObject .

Для итерации по Transform ‘ам всех потомков путей у нас 2:

  1. GameObject.GetComponentsInChildren<Transform>()
  2. Рекурсивно делать foreach(var child in this.transform)

Для обоих случаев напишем какой-то универсальный метод, который будет применять переданный метод к каждому потомку:

Для рекурсивного foreach(var child in this.transform)

Результаты

Методы выше кидаем в Update с рандомным методом:

Результаты на i7 6700K для объекта с числом потомков 13824:

Разница видна невооруженным глазом, и вот почему:

введите сюда описание изображения

Лишь чуть меньше половины времени тратиться на нахождение всех Transform компонентов через GetComponentsInChildren . Да и реализовано это одним вызовом к ядру Unity, которое написано на С++.

А вот рекурсивный вызов через C# постоянно будет дергать это ядро, что влечет за собой серьезные накладные расходы.

Web server is returning an unknown error Error code 520

There is an unknown connection issue between Cloudflare and the origin web server. As a result, the web page can not be displayed.

What can I do?

If you are a visitor of this website:

Please try again in a few minutes.

If you are the owner of this website:

There is an issue between Cloudflare’s cache and your origin web server. Cloudflare monitors for these errors and automatically investigates the cause. To help support the investigation, you can pull the corresponding error log from your web server and submit it our support team. Please include the Ray ID (which is at the bottom of this error page). Additional troubleshooting resources.

Cloudflare Ray ID: 803eb627f1de6259 • Your IP: Click to reveal 178.175.133.131 • Performance & security by Cloudflare

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *