Можно ли получить вложенный дочерний объект игрового объекта от родителя с помощью скрипта?

Можно ли получить вложенный дочерний объект от родителя?

Объект Map Game выглядит следующим образом:

ListProcess (ListProcessItem1) => item1 => 1 => ItemIcon

Например, я использую этот код:

itemslot = GameObject.FindGameObjectWithTag ("ListProcessItem1").gameObject;
GameObject item = itemslot.gameObject.transform.GetChild(0).gameObject;
GameObject child = item.gameObject.transform.GetChild(0).gameObject;
GameObject sitemImage = child.gameObject.transform.GetChild(0).gameObject;

Когда я запускаю код, я получаю сообщение об ошибке:

UnityException: Transform child out of bounds
LakeMainProcess.generatePrize1 () (at Assets/script/fishing/LakeMainProcess.cs:48)
LakeMainProcess.Start () (at Assets/script/fishing/LakeMainProcess.cs:21)

Примечание: я могу дотянуться только до игрового объекта (1). Игровой объект ( ItemIcon ) получил ошибку.

Как я могу это исправить?


person Dennis Liu    schedule 10.08.2016    source источник


Ответы (1)


Замените свой фрагмент следующим:

Debug.Log("A " + GameObject.FindGameObjectWithTag ("ListProcessItem1") == null);
var itemslot = GameObject.FindGameObjectWithTag ("ListProcessItem1").gameObject;

Debug.Log("B " + itemslot.gameObject.transform.GetChild(0) == null);
GameObject item = itemslot.gameObject.transform.GetChild(0).gameObject;

Debug.Log("C " + item.gameObject.transform.GetChild(0) == null);
GameObject child = item.gameObject.transform.GetChild(0).gameObject;

Debug.Log("D " + child.gameObject.transform.GetChild(0) == null);
GameObject sitemImage = child.gameObject.transform.GetChild(0).gameObject;

Он скажет вам, какой объект не может быть найден. Бьюсь об заклад, это FindGameObjectWithTag, вы уверены, что этот объект имеет именно этот тег?

В качестве альтернативы и более просто используйте:

var ico = GameObject.FindGameObjectWithTag("ListProcessItem1").transform.FindChild("item1/1/ItemIcon").GetComponent<WhateverYouNeed>();
person izeed    schedule 10.08.2016
comment
Да, @ized, я что-то пропустил. Игровой объект не запускается в ListProcess. Но он начинается с item1 => ListProcessItem1. Спасибо. - person Dennis Liu; 10.08.2016