获取对象中所有子对象中所有标签的列表

时间:2019-11-13 10:21:56

标签: c# unity3d

我正在尝试将所有标签放入list<string>中,但看来我只能在我最大的尝试是使用toString()的字符时循环遍历标签,但这还是行不通的

public List<string> GetWorldObjectsTag()
{
    var worldObjects = new List<string>();

    foreach (string child in worldOBjectsPrefab.gameObject.tag.ToString())
    {
        worldObjects.Add(child);
    }

    return worldObjects;
}
foreach(string name in currentWorldGen.GetWorldObjectsTag())
{
    Debug.Log(name);
    if (name == sawBlade.tag)
    {
        Instantiate(sawBlade, new Vector2(trans.position.x + Camera.main.transform.position.x + 20, trans.position.y), Quaternion.identity);

    }
    else
    {
        Instantiate(testBlock, new Vector2( trans.position.x + Camera.main.transform.position.x + 20, trans.position.y), Quaternion.identity);
    }
}

这可能不是一个好方法,所以如果有人有更好的主意,请告诉我。

编辑:

这些是我使用的对象

picture of materials

答案 我可以遍历所有转换,只需执行transform.gameObject就可以将这些转换还原回gameObject 感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我认为您可以使用foreach遍历所有子项:

如果上述方法无效,请尝试使用Transform:

foreach (Transform child in worldObjectPrefab.transform)
{
    // Here you can access child.tag and add do what you need to do.
}

对不起,但我现在无法访问Unity。 让我知道是否有帮助。

答案 1 :(得分:0)

在Unity源代码中,您可以看到Transform实现了接口IEnumerable,因此您基本上可以做到

public List<string> GetWorldObjectsTag()
{
    var listOfTags = new List<string>();

    foreach(Transform child in worldOBjectsPrefab.transform)
    {
        listOfTags.Add(child.name);
    }

    return listOfTags;
}

非常相似的是使用Linq Select之类的

public List<string> GetWorldObjectsTag()
{
    return ((IEnumerable<Transform>) worldOBjectsPrefab.transform).Select(child => child.tag).ToList();
}

由于在两种情况下它都是无类型的IEnumerable,因此您必须明确告诉它使用类型Transform

相关问题