我有这段代码。我需要迭代每个子对象,但子对象可能有更多的子对象。首次运行程序时会调用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(),也不知道这是否可行,但我无法弄清楚如何做到这一点。
答案 0 :(得分:1)
你写它的方式实际上就是你想要的方式。该方法称为递归。这是一种非常流行的方式来实现你想要做的事情,没有任何方法可以调用自己,如果在某些指导方针中完成,比如在再次执行之前满足某些标准。