Как получить внуков от ребенка (c # UNITY) - PullRequest
0 голосов
/ 28 июня 2018

Как я могу привести внуков детей в единство

Вот моя иерархическая структура

enter image description here

Я пытался сделать это

public Transform[] trans;

trans = GetComponentsInChildren<Transform>();

foreach(Transform gc in trans)
{
    //this could only get the first layer.
}

Кстати, мой скрипт в ScrollView GameObject

РЕДАКТИРОВАТЬ:

Transform grid_gametable;
// Use this for initialization
void Start()
{
    sp = sv.GetComponent<SpringPanel>();
    if (sp == null) sp = sv.AddComponent<SpringPanel>();

    sp.target.x = 0;
    sp.target.y = 0;
    sp.target.z = 0;

    StartCoroutine("ItemCheck");

}


IEnumerator ItemCheck()
{
    grid_gametable = transform.Find("Grid_gametable");

    for (int i = 0; i < grid_gametable.childCount; i++)
    {
        Debug.Log("How many: " + grid_gametable);
    }
    yield return null;
}

Странно, что счетчик не работает.

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я не совсем понимаю, что вы хотите, поэтому я предполагаю, что вы хотите сделать следующее: если вы представляете иерархию как дерево, вы хотите найти каждый лист дерева? Мы можем сделать это с помощью типичного графика поиска. Я использовал поиск в ширину здесь.

public static List<Transform> FindAllLeaves(Transform transform)
{
    var transforms = new List<Transform>();
    var queue = new Queue<Transform>();

    queue.Enqueue(transform);

    while(queue.Count > 0)
    {
        var t = queue.Dequeue();
        if(transform.childCount > 0)
        {
            foreach (Transform child in t.GetComponentsInChildren<Transform>())
            {
                queue.Enqueue(child);
            }
        } else
        {
            transforms.Add(t);
        }
    }
    return transforms;
}

Это то, что вы пытались достичь?

0 голосов
/ 28 июня 2018

Поскольку скрипт присоединен к ScrollView, вы можете использовать transform.Find, чтобы сначала найти дочерний элемент "Grid_gametable". После этого переберите этот дочерний объект grid_gametable, чтобы получить все его дочерние объекты prefab_Gametable_baccarat.

Transform grid_gametable = transform.Find("Grid_gametable");

foreach (Transform gc in grid_gametable)
{
    Debug.Log(gc.name);
}

Кроме того, grid_gametable является первым дочерним элементом ScrollView. Вы также можете использовать transform.GetChild(0) вместо transform.Find, чтобы найти "grid_gametable", а затем перебрать его дочерние элементы.

Transform grid_gametable = transform.GetChild(0);

foreach (Transform gc in grid_gametable)
{
    Debug.Log(gc.name);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...