迭代多个级别的子对象

时间:2015-06-13 14:50:39

标签: c# unity3d iterator

我有这段代码。我需要迭代每个子对象,但子对象可能有更多的子对象。首次运行程序时会调用Awake()方法。所以,我问如何构建一个迭代器来检查子节点中是否有子节点。然后对这些子项运行ResizeMeshCollection(MeshFilter[] collection),直到没有子对象为止。

    public class ResizeAsset : MonoBehaviour {


    void Awake()
    {
        ResizeMeshCollection(this.GetComponentsInChildren<MeshFilter>());
    }

    void ResizeMeshCollection(MeshFilter[] collection)
    {
        foreach (MeshFilter mf in collection)
        {
            mf.GetComponent<MeshFilter>();
            Transform tf = mf.GetComponent<Transform>();
            /// Resize logic here
            /// check if there are children under this child object, 
            /// Run ResizeMeshCollection() on
            /// all children until there are no more.

我确定我不想在自己内部运行ResizeMeshCollection(),也不知道这是否可行,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

你写它的方式实际上就是你想要的方式。该方法称为递归。这是一种非常流行的方式来实现你想要做的事情,没有任何方法可以调用自己,如果在某些指导方针中完成,比如在再次执行之前满足某些标准。