Unity как найти дочерний объект

I want to say somethings like..

Gameobject.find(child gameobject of specific parent Gameobject)

Can anyone help me.
thanks!

Community's user avatar

asked Sep 10, 2014 at 10:55

2

GameObject.Find will search for a gameobject in the scene. To search a gameobject from a parent, use Transform.

There are 2 ways of doing it:

  1. transform.Find("childname")
  2. transform.FindChild("childname")

The 2nd option is deprecated but still functional, so you’d better use the 1st option.

demented hedgehog's user avatar

answered Sep 10, 2014 at 11:09

Jay Kazama's user avatar

Jay KazamaJay Kazama

3,1472 gold badges18 silver badges25 bronze badges

3

Fixing Jay Kazama’s answer. The correct answers are:

  1. transform.Find (“childname”)
  2. transform.FindChild (“childname”)

With small t (property transform, not class Transform).

answered Mar 13, 2015 at 16:12

user3164248's user avatar

user3164248user3164248

1553 silver badges8 bronze badges

1

If a GameObject are you looking for in hierarchy it must be like:

transform.Find("head/eyes")
transform.FindChild("head/eyes")

answered Jul 17, 2015 at 7:30

zxmaster's user avatar

zxmasterzxmaster

511 silver badge2 bronze badges

1

For answers above stating transform.FindChild("childname") as Answer, this is to inform you that transform.FindChild("childname") is deprecated.

Use this, this will work as expected

transform.Find("childName");

if you want to find Child of a GameObject by name, use this,

GameObject head = HeadPanel;    // just for reference
head.transorm.Find("childName").gameObject;

answered Jan 18, 2019 at 10:47

Junaid Pathan's user avatar

Junaid PathanJunaid Pathan

3,7321 gold badge23 silver badges45 bronze badges

You can do this by
GetChild(index of child members)

answered May 8, 2019 at 9:50

1

Nesting objects under another object is very useful for many situations, such as making an object’s position relative to another object. When you want to get child objects in Unity to run some functions on them all at the same time, you will need some ways to access those nested objects. Fortunately, Unity provides multiple ways of accessing child objects.

The simplest way to get a child object of a game object in Unity is to use the Find method of the Transform class, i.e. transform.Find(“Child Object’s Name”). This method will return the target child object which you can then perform various things with. If the object with the specified name doesn’t exist, the method will return null.

Unity provides various ways of accessing child objects such as getting a child object by name, getting a child object by its order within the parent object, or even getting all children of an object. Below, you will find various ways to get child objects in Unity.

Table of Contents

  • How to Get A Child Object of An Object by Name in Unity
  • How to Get A Child Object of An Object by Its Index in Unity
  • How to Get Child Objects of An Object in Unity
  • How to Call A Method In All Child Objects of An Object in Unity

How to Get A Child Object of An Object by Name in Unity

If you know the name of the child object you want to access, using the Transform.Find method is the simplest way to access the target child object.

Let’s say we have a game object with multiple child objects:

A game object with multiple child objects.
Child objects

Now, if you want to get the object named “Child02” that is nested under the parent object named “TheParent“, call the Find method of the Transform component of its parent.

The example below assumes the script is attached to the parent object (TheParent object):

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { void Start() { Transform child = transform.Find("Child02"); Debug.Log(child.name); } }

Code language: C# (cs)

Because the Transform component of the parent object is already made available within the MonoBehaviour script that’s attached to it, we use “transform” (all lowercase) instead of “Transform” (capitalized).

This makes it so we can call transform.Find right away without having to get the component with the GetComponent method first.

4 Easy Ways to Get Child Objects In Unity
Result

The example above will print out the name of the child object to the console.

Note that this method only works when you know the name of the child object you want. Also, inputting a name of a child object that doesn’t exist will result in the method returning a null value.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { void Start() { Transform child = transform.Find("ChildABCDEFG12345"); Debug.Log(child); } }

Code language: C# (cs)
4 Easy Ways to Get Child Objects In Unity
Null because can’t find the child object

This method also cannot be used to get a child object of another parent. To do that, you must have a reference to that parent’s Transform component.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { [SerializeField] private Transform anotherObject; void Start() { Transform childOfAnotherObject = anotherObject.Find("ChildA"); } }

Code language: C# (cs)

How to Get A Child Object of An Object by Its Index in Unity

Sometimes, it’s not always ideal to get child objects by their names if they’re procedurally generated and there are a bunch of them under a parent object.

This is where we get them by the index of their positions instead. This is similar to dealing with arrays.

4 Easy Ways to Get Child Objects In Unity

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { void Start() { Transform child = transform.GetChild(0); Debug.Log(child.name); } }

Code language: C# (cs)

The example above will print out the name of the child object at index number 0 which is the first child in the hierarchy.

4 Easy Ways to Get Child Objects In Unity

Note that the GetChild method will throw an out-of-bound error if you specify an index that’s bigger than the total number of all the children under the parent.

To combat this, use the childCount property to determine the total number of child objects of the parent object.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { void Start() { Transform child = transform.GetChild(transform.childCount - 1); Debug.Log("Child Count: " + transform.childCount); Debug.Log(child.name); } }

Code language: C# (cs)

The example above gets the last child object of this parent object and prints out its name to the console. The reason we have to subtract one from the count is because the index starts at 0, not 1.

4 Easy Ways to Get Child Objects In Unity

You might notice that the child count returns 4 when there are 5 child objects under the parent object. This is because it only counts the direct child objects.

How to Get Child Objects of An Object in Unity

There are times when you want to access child objects of an object. Unfortunately, Unity doesn’t have an easy method to use to get a list of all children nested under a game object.

But not all hope is lost. We can work around this issue by iterating through all of the child objects using a for-each loop.

4 Easy Ways to Get Child Objects In Unity

using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetChildrenScript : MonoBehaviour { void Start() { List<Transform> children = new(); foreach (Transform child in transform) { Debug.Log(child.name); children.Add(child); } Debug.Log("Count: " + children.Count); } }

Code language: C# (cs)

It is not documented, but when a Transform is used with a for-each loop, you can loop through all of the direct child objects of that Transform.

The example above will get all of the child objects and store them in a List.

4 Easy Ways to Get Child Objects In Unity

How to Call A Method In All Child Objects of An Object in Unity

There will come a time when you want to execute a command for all of the child objects within a parent object. For example, when you want to iterate through all children of an object and make them execute a function like shoot bullets or explode all at the same time.

Unity has made it quite easy to do this. All you have to do is call the BroadcastMessage method.

4 Easy Ways to Get Child Objects In Unity

This is the parent’s script:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ParentObject : MonoBehaviour { void Start() { transform.BroadcastMessage("SayMyName"); } private void SayMyName() { Debug.Log("My name is " + transform.name); } }

Code language: C# (cs)

And this script below is attached to each of the child objects:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ChildObject : MonoBehaviour { private void SayMyName() { Debug.Log("My name is " + transform.name); } }

Code language: C# (cs)

What BroadcastMessage does is it will execute the method with the specified name in all of the MonoBehaviour scripts of all child objects AND the parent object itself, if there is one.

4 Easy Ways to Get Child Objects In Unity

The BroadcastMessage method can also take a parameter and pass it to the specified method. For more information, see the official documentation.

This is useful when you just want to execute a method of child objects without having to first get them.

Attribution

Diagram icon made by Good Ware from www.flaticon.com

Your question is a little confusing. This is what I understand from what you are asking. How to find a child object of parent object that changes its name during run time.

You can do this with the FindChild function but there is another way of doing this. You can do it with just the Find function.

By using the Find function, when you use ‘/’ before the name of the gameobject you are looking for, Unity takes it like you are looking for a child GameObject.

For example,
GameObject.Find("state") will look for parent GameObject called state.

If you use GameObject.Find(/Country/state), Unity will ONLY search for a GameObject named “state” that is inside a parent GameObject called “Country“.

So assuming that your parent GameObject is called Country and your child GameObject is called State, you can find the child of the Country GameObject with

GameObject.Find("/Country/State");

Or like this

string nameOfParentObject = "ParentObject";
string nameOfChildObject = "ChildObject";

string childLocation = "/" + nameOfParentObject + "/" + nameOfChildObject;
GameObject childObject = GameObject.Find (childLocation);

You can even put this into a fucntion if you need to search for child GameObject from a parent more often

GameObject findChildFromParent (string parentName, string childNameToFind)
{
    string childLocation = "/" + parentName + "/" + childNameToFind;
    GameObject childObject = GameObject.Find (childLocation);
    return childObject;
}

Now, anytime you want to search for a GameObject child inside a parent GameObject, you can just call the function which will return the GameObject.

Let’s just say that the name of your parent class is Jinbom but then changed to
“Country” during runtime while your child object name remains as “State”. You can find the “State” GameObject by doing this

GameObject childObject = findChildFromParent ("Country", "State");

And to get the name of your GameObject that changed during runtime, you can just use yourgameObject.name.

You can do this during runtime

GameObject childObject = findChildFromParent (yourgameObject.name, "State");

Класс Unity GameObject используется для представления всего, что может существовать в Сцене Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
.

Эта страница относится к скриптам с классом GameObject Unity. Чтобы узнать об использовании игровых объектов в сцене и иерархии в редакторе Unity, см. раздел GameObjects руководства пользователя. Исчерпывающую информацию о каждом члене класса GameObject см. в справочнике по сценариям GameObject.

GameObjects — это стандартные блоки для сцен в Unity, которые служат контейнером для функциональных компонентов, определяющих, как выглядит GameObject и что делает GameObject.

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

Свойства статуса сцены

С помощью скрипта можно изменить ряд свойств, которые относятся к статусу игрового объекта в сцене. Обычно они соответствуют элементам управления, видимым в верхней части инспектораокна Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройки проекта, позволяющие просматривать и редактировать значения. Дополнительная информация
См. в Словарь
, когда в редакторе выбран GameObject.

Они не относятся к какому-либо конкретному компоненту и отображаются в инспекторе GameObject вверху над списком компонентов.

Типичный GameObject, просматриваемый в Инспекторе. В данном случае направленный свет. Свойства состояния сцены обведены красным.

Типичный GameObject, просматриваемый в Инспекторе. В данном случае направленный свет. Свойства состояния сцены обведены красным.

Все игровые объекты имеют общий набор элементов управления в верхней части инспектора, относящихся к статусу игрового объекта в сцене, и ими можно управлять с помощью API сценариев игрового объекта.

Если вам нужен краткий список всех доступных API для класса GameObject, см. Справочник по скриптам GameObject.

Активный статус

Активный статус GameObject

Активный статус GameObject

Игровые объекты активны по умолчанию, но их можно деактивировать, что приведет к отключению всех компонентов, прикрепленных к игровым объектам. Обычно это означает, что он станет невидимым и не будет получать какие-либо обычные обратные вызовы или события, такие как Update или FixedUpdate.

Статус игрового объекта активен представлен флажком слева от имени игрового объекта. Вы можете управлять этим с помощью GameObject.SetActive.

Вы также можете прочитать текущее активное состояние с помощью GameObject.activeSelf, а также не GameObject действительно активен в сцене с использованием GameObject.activeInHierarchy. Последнее из этих двух необходимо, потому что действительно ли GameObject активен, определяется его собственным активным состоянием плюс активным состоянием всех его родителей. Если какой-либо из его родителей неактивен, он не будет активен, несмотря на его собственную активную настройку.

Статический статус

Статический статус GameObject

Статический статус GameObject

Некоторые системы Unity, такие как Global Illuminationгруппа методов, которые моделируют как прямое, так и непрямое освещение для обеспечения реалистичного освещения. полученные результаты. В Unity есть две системы глобального освещения, сочетающие прямое и непрямое освещение: запеченное глобальное освещение и глобальное освещение в реальном времени.
См. в Словарь
, Окклюзия, Пакетная обработка, Навигация и Reflection ProbesКомпонент рендеринга, который захватывает сферическое изображение своего окружения во всех направлениях, подобно камере. Захваченное изображение затем сохраняется как кубическая карта, которую можно использовать для объектов с отражающими материалами. Подробнее
См. в Словарь
, полагайтесь на статический статус GameObject. Вы можете указать, какие из систем Unity будут считать GameObject статическими, используя GameObjectUtility.SetStaticEditorFlags. Узнайте больше о статических игровых объектах здесь.

Теги и слои

Статический статус GameObject

Статический статус GameObject

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

Дополнительную информацию об использовании тегов и слоев в редакторе см. на основных страницах руководства пользователя для тегов. Опорное слово, которое вы можете присвоить одному или нескольким игровым объектам, чтобы помочь вам идентифицировать игровые объекты для сценариев. Например, вы можете определить тег «Съедобный» для любого предмета, который игрок может съесть в вашей игре. Подробнее
См. в Словарь
и СлоиСлои в Unity можно использовать для выборочного включения или исключения групп игровых объектов из определенных процессов или вычислений. Это включает в себя рендеринг камеры, освещение, физические коллизии или пользовательские вычисления в вашем собственном коде. Подробнее
См. в Словарь
.

Вы можете изменить значения тегов и слоев с помощью скрипта, используя GameObject.tag и GameObject.layer. Вы также можете эффективно проверить тег GameObject с помощью метода CompareTag, который включает проверку того, тег существует и не вызывает выделения памяти.

Добавление и удаление компонентов

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

Лучший способ добавить компонент во время выполнения — использовать AddComponent, указав тип компонента в угловых скобках, как показано. Чтобы удалить компонент, вы должны использовать метод Object.Destroy для самого компонента.

Доступ к компонентам

Самый простой случай — когда скрипту игрового объекта требуется доступ к другому компоненту, прикрепленному к тому же игровому объекту (помните, что другие скрипты, прикрепленные к игровому объекту, также сами являются компонентами). Для этого первым делом необходимо получить ссылку на экземпляр компонента, с которым вы хотите работать. Это делается с помощью метода GetComponent. Как правило, вы хотите присвоить объект Component переменной, что делается с помощью следующего кода. В этом примере скрипт получает ссылку на Rigidbodyкомпонент, который позволяет моделируемой гравитации и другим силам воздействовать на GameObject. . Подробнее
См. в компоненте Словарь
на том же GameObject:

void Start ()
{
Rigidbody rb = GetComponent();
}

Once you have a reference to a Component instance, you can set the values of its properties much as you would in the Inspector:

void Start ()
{
Rigidbody rb = GetComponent();

// Change the mass of the object's Rigidbody.
rb.mass = 10f;
}

Вы также можете вызывать методы для ссылки на компонент, например:

void Start ()
{
Rigidbody rb = GetComponent();

// Add a force to the Rigidbody.
rb.AddForce(Vector3.up * 10f);
}

Примечание: у вас может быть несколько пользовательских скриптовфрагмент кода, который позволяет создавать собственные компоненты, запускающие игровые события , изменяйте свойства компонента с течением времени и реагируйте на ввод данных пользователем любым удобным для вас способом. Подробнее
См. Словарь
, прикрепленный к тому же GameObject. Если вам нужно получить доступ к одному скрипту из другого, вы можете использовать GetComponent как обычно и просто использовать имя класса скрипта (или имя файла), чтобы указать нужный тип компонента.

Если вы попытаетесь получить тип компонента, который на самом деле не был добавлен в GameObject, GetComponent вернет значение null; вы получите ошибку нулевой ссылки во время выполнения, если попытаетесь изменить какие-либо значения нулевого объекта.

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

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

Связывание с игровыми объектами с помощью переменных в инспекторе

Самый простой способ найти связанный GameObject — добавить в скрипт общедоступную переменную GameObject:

public class Chef : MonoBehaviour
{
public GameObject stove;

// Other variables and functions...
}

Эта переменная будет видна в Инспекторе как поле GameObject.

Теперь вы можете перетащить объект со сцены или панели иерархии на эту переменную, чтобы назначить ее.

Перетаскивание префаба из окна проекта в поле GameObject в окне инспектора

Перетаскивание префаба из окна проекта в поле GameObject в окне инспектора

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

public class Chef : MonoBehaviour {

public GameObject stove;

void Start() {
// Start the chef 2 units in front of the stove.
transform.position = stove.transform.position + Vector3.forward * 2f;
}
}

Кроме того, если вы объявите общедоступную переменную типа Компонент в своем скрипте, вы сможете перетащить любой GameObject, к которому прикреплен этот Компонент. Это напрямую обращается к компоненту, а не к самому игровому объекту.

public Transform playerTransform;

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

Поиск дочерних игровых объектов

Иногда игровая сцена использует несколько игровых объектов одного типа, таких как предметы коллекционирования, путевые точки и препятствия. Их может потребоваться отслеживать с помощью определенного сценария, который контролирует их или реагирует на них (например, может потребоваться, чтобы все путевые точки были доступны для сценария поиска пути). Использование переменных для связывания этих игровых объектов возможно, но это делает процесс проектирования утомительным, если каждую новую путевую точку нужно перетаскивать в переменную в сценарии. Точно так же, если путевая точка удалена, то удаление ссылки переменной на отсутствующий объект GameObject является неприятностью. В подобных случаях часто лучше управлять набором игровых объектов, сделав их дочерними элементами одного родительского игрового объекта. Дочерние игровые объекты можно получить с помощью родительского компонента TransformКомпонент Transform определяет положение, вращение и масштаб каждого объекта в сцена. Каждый GameObject имеет Transform. Подробнее
См. в Словарь
(поскольку все игровые объекты неявно имеют преобразование):

using UnityEngine;

public class WaypointManager : MonoBehaviour {
public Transform[] waypoints;

void Start()
{
waypoints = new Transform[transform.childCount];
int i = 0;

foreach (Transform t in transform)
{
waypoints[i++] = t;
}
}
}

Вы также можете найти определенный дочерний объект по имени, используя метод Transform.Find: transform.Find ("Сковорода");

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

Отправка и трансляция сообщений

Во время редактирования проекта вы можете установить ссылки между игровыми объектами в Инспекторе. Однако иногда невозможно настроить их заранее (например, найти ближайший к персонажу предмет в вашей игре или сделать ссылки на игровые объекты, экземпляры которых были созданы после загрузки сцены). В этих случаях вы можете находить ссылки и отправлять сообщения между игровыми объектами во время выполнения.

BroadcastMessage позволяет отправить вызов именованному методу, не уточняя о том, где этот метод должен быть реализован. Вы можете использовать его для вызова именованного метода для каждого MonoBehaviour в конкретном GameObject или любом из его дочерних элементов. При желании вы можете указать, что должен быть хотя бы один получатель (иначе будет сгенерирована ошибка).

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

SendMessageUpwards аналогичен, но отправляет вызов именованного метода в GameObject и все его родители.

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

Всегда можно найти игровые объекты в любом месте иерархии сцен, если у вас есть информация для их идентификации. Отдельные объекты можно получить по имени с помощью функции GameObject.Find:

GameObject player;

void Start()
{
player = GameObject.Find("MainHeroCharacter");
}

Объект или набор объектов также можно найти по их тегу с помощью GameObject.FindWithTag и GameObject.FindGameObjectsWithTag.

Например, в кулинарной игре с одним персонажем-поваром и несколькими плитами на кухне (каждая из которых помечена как «Плита»):

GameObject chef;
GameObject[] stoves;

void Start()
{
chef = GameObject.FindWithTag("Chef");
stoves = GameObject.FindGameObjectsWithTag("Stove");
}

Создание и уничтожение игровых объектов

Вы можете создавать и уничтожать игровые объекты во время работы вашего проекта. В Unity GameObject можно создать с помощью метода Instantiate, который создает новую копию существующего объекта.

Полное описание и примеры создания экземпляров GameObject см. в разделе Создание экземпляров префабов во время выполнения.

Существует также метод Destroy, который уничтожит объект после завершения обновления кадра или, опционально, после небольшой задержки:

void OnCollisionEnter(Collision otherObj) {
if (otherObj.gameObject.tag == "Garbage can") {
Destroy(gameObject, 0.5f);
}
}

Обратите внимание, что функция Destroy может уничтожать отдельные компоненты, не затрагивая сам GameObject. Распространенной ошибкой является написание этого, предполагая, что это уничтожит GameObject скрипт, к которому он прикреплен…

Destroy(this);

…принимая во внимание, что, поскольку «это» представляет сценарий, а не игровой объект, на самом деле он просто уничтожит вызывающий его компонент сценария, оставив игровой объект позади, а компонент сценария будет удален.

Примитивы

Класс GameObject предлагает основанные на сценариях альтернативы параметрам, доступным в меню GameObject Unity, что позволяет создавать примитивные объекты.

Чтобы создать экземпляры встроенных примитивов Unity, используйте GameObject.CreatePrimitive, который создает экземпляр примитива того типа, который вы указываете. Доступные примитивные типы: Sphere, Capsule, Цилиндр, Куб, Плоскость и QuadПримитивный объект, напоминает плоскость, но его ребра имеют длину всего одну единицу, он использует только 4 вершины, а поверхность ориентирована в плоскости XY локального координатного пространства. Подробнее
См. в Словарь
.

Примитивные формы, доступные в меню Unity GameObject

Примитивные формы, доступные в меню Unity GameObject

Найти дочерний объект [РЕШЕНО]

Найти дочерний объект [РЕШЕНО]

Добрый день форумчане.
Есть такая проблема: существует префаб моба bot11 у него есть дочерние объекты bot1 – модель бота и target – цель, куда он идет.
При клике мышки на нем – происходит выделение бота (это работает). А вот получить таргет я не могу.
Так как это префаб бота. То все боты и таргеты имеют одинаковые имена.
Пользуясь командой GameObject.Find – находится первый таргет в инспекторе. А мне надо найти именно таргет дочерний выбранному боту.

Последний раз редактировалось Wainakh58 03 авг 2014, 13:59, всего редактировалось 1 раз.

Wainakh58
UNец
 
Сообщения: 4
Зарегистрирован: 03 авг 2014, 12:22

Re: Найти дочерний объект

Сообщение Левш@ 03 авг 2014, 12:42

Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Найти дочерний объект

Сообщение Wainakh58 03 авг 2014, 12:57

Отлично, умник, и где ты видишь решение моей проблемы?
Поиск по тэгу, по коллайдеру, по имени и даже по имени через (/../) я знаю. А то, что мне поможет я не вижу.

Wainakh58
UNец
 
Сообщения: 4
Зарегистрирован: 03 авг 2014, 12:22

Re: Найти дочерний объект

Сообщение TxN 03 авг 2014, 13:18

Wainakh58 писал(а):Отлично, умник, и где ты видишь решение моей проблемы?
Поиск по тэгу, по коллайдеру, по имени и даже по имени через (/../) я знаю. А то, что мне поможет я не вижу.

Зачем так агриться? Очень невежливо ваще-т.
По проблеме:
Если ты уже знаешь объект бота, то найти дочерний объект проблем нет никаких. Используешь конструкцию типа:

Используется csharp

SelectedBot.transform.Find(“Marker”);

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

Последний раз редактировалось TxN 03 авг 2014, 13:21, всего редактировалось 1 раз.

TxN
UNец
 
Сообщения: 37
Зарегистрирован: 25 июл 2014, 14:13

Re: Найти дочерний объект

Сообщение Левш@ 03 авг 2014, 13:20

мне надо найти именно таргет дочерний

Transform.Find – вторая ссылка сверху – ищет только дочерние обьекты…
Finds a child by name and returns it.

я не вижу

Очки купи. (popcorn1)

Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Найти дочерний объект

Сообщение Wainakh58 03 авг 2014, 13:47

Извиняюсь за вспыльчивость. Просто долго не могу решить эту проблему, пролазил кучу форумов и такого не нашел.
Ага. Я вспомнил почему это не работает в моем случае.
bot11
-bot1(модель)
-target

Вот как выглядит префаб. в скрипт передается объект, на колайдер которого натыкается райкаст от камеры. Коллайдер висит на самом верхнем объекте. С transform.find я получаю нужный таргет. Но проблема новая – модель бота двигается, а коллайдер остается на месте, и заново выделить этого бота не возможно.
Решения я вижу следующее :
Коллайдер мы вешаем на модель бота.
В скрипте мы получаем модель бота.
Но таргет теперь НЕ дочерний объект.

Как быть? По факту : Надо найти дочерний объект родительского объекта по отношению к выделенному объекту

CureUnit = hit.collider.gameObject;
Parrent = CureUnit.transform.parent;
target = Parrent.transform.Find(“Target”);
Не фурычит… Есть идеи?

Wainakh58
UNец
 
Сообщения: 4
Зарегистрирован: 03 авг 2014, 12:22

Re: Найти дочерний объект

Сообщение Wainakh58 03 авг 2014, 13:58

Всем спасибо :) Решение найдено и до ужаса простое :)

CureUnit = hit.collider.gameObject;
Parrent = CureUnit.transform.parent.gameObject;
target = Parrent.transform.Find(“Target”);

Надо было паррен объявлять как объект.. вот я затупок :)

Wainakh58
UNец
 
Сообщения: 4
Зарегистрирован: 03 авг 2014, 12:22


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 17



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