当前位置:  开发笔记 > 编程语言 > 正文

如何在unity3d中使用c#获取模型描述列表?

如何解决《如何在unity3d中使用c#获取模型描述列表?》经验,为你挑选了1个好方法。

如何为3D角色模型定义模型描述列表(如颈部,脊柱,下唇等)?我试着编写一个脚本:

using UnityEngine;
using System.Collections;
public class Arrays : MonoBehaviour
{
    public GameObject[] players;

    void Start()
    {
        players = GameObject.FindGameObjectsWithTag("avatar_5");  
        for (int i = 0; i < players.Length; i++)
        {
            Debug.Log(players[i].name);
            Debug.Log("Player Number " + i + " is named " + players[i].name);
        }
    }
}

但结果我收到此错误: UnityException:标签:avatar_5未定义



1> Smartis..:

理解

首先,你在Unity3D中描述的model description很简单GameObjects.而且您的例外情况告诉我们您GameObject的标签上没有正确的标签.

另外还有一个差异巨大GameObject名称和他的标签.

你能看到区别么?

因此,如果您想要打印特定的所有孩子,GameObject您必须首先找到它,然后访问它的孩子GameObject.GetChild().

正如所提到的评论,GameObject.Find()只会返回第一个GameObject具有确切名称,而不是全部.因此,我们必须遍历所有GO,以找到具有正确名称的GO.


解法

为了完成你的问题,我想我们必须打印出的层次结构GameObject.因此,GameObject如果有父对象,我们只需检查所有的对象,并在列表中收集它们.然后我们可以遍历它们并阅读他们的孩子.

为了检查a GameObject是父项还是具有Child,我们总是要查看Transform给定GameObject 的Component.

要注意的是,这种循环是非常重要的性能任务.

下面是一些示例代码,以便更好地理解我的意思以及Unity3D中的这种行为如何工作:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class ReadAllGOs : MonoBehaviour
{
    void Start()
    {
        var parents = FindParentGameObjects();
        for (int i = 0; i < parents.Count; i++)
        {
            Debug.Log("--> Parent Number " + i + " is named: " + parents[i].name);
            ReadChildren(parents[i]);
        }
    }

    List FindParentGameObjects()
    {
        List goList = new List();
        foreach (GameObject go in GameObject.FindObjectsOfType(typeof(GameObject)))
        {
            if (go.transform.parent == null)
            {
                goList.Add(go);
            }
        }
        return goList;
    }

    void ReadChildren(GameObject parent)
    {
        for (int i = 0; i < parent.transform.childCount; i++)
        {
            GameObject child = parent.transform.GetChild(i).gameObject;
            Debug.Log(string.Format("{0} has Child: {1}", parent.name, child.name));
            // inner Loop
            ReadChildren(child);
        }
    }
}

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有