コード例 #1
0
    /// <summary>
    /// 获取所有子物体  并 记录信息
    /// </summary>
    /// <param name="objs"></param>
    public void GetAll(GameObject objs)
    {
        for (int i = 0; i < objs.transform.childCount; i++)
        {
            GameObject temp = objs.transform.GetChild(i).gameObject;

            children.Add(temp);
            if (recordTransform)
            {
                positions.Add(temp.transform.localPosition);
                rotations.Add(temp.transform.localRotation);
                enable.Add(temp.activeSelf);
                scales.Add(temp.transform.localScale);
            }

            if (recordObjsInfo)
            {
                if (temp.GetComponent <MeshRenderer>())
                {
                    //通过图层过滤
                    if (objs.layer != 8)
                    {
                        int matsCount;
                        #if UNITY_EDITOR
                        matsCount = temp.GetComponent <MeshRenderer>().sharedMaterials.Length;
                        #else
                        matsCount = temp.GetComponent <MeshRenderer>().materials.Length;
                        #endif
                        objInfoClass tempObj = new objInfoClass();
                        tempObj.obj = temp;
                        for (int j = 0; j < matsCount; j++)
                        {
                            MaterialClass tempMaterials = new MaterialClass();
                            #if UNITY_EDITOR
                            tempMaterials.shader = temp.GetComponent <MeshRenderer>().sharedMaterials[j].shader;
                            if (temp.GetComponent <MeshRenderer>().sharedMaterials[j].HasProperty("_Color"))
                            {
                                tempMaterials.color = temp.GetComponent <MeshRenderer>().sharedMaterials[j].color;
                            }
                            #else
                            tempMaterials.shader = temp.GetComponent <MeshRenderer>().materials[j].shader;
                            if (temp.GetComponent <MeshRenderer>().materials[j].HasProperty("_Color"))
                            {
                                tempMaterials.color = temp.GetComponent <MeshRenderer>().materials[j].color;
                            }
                            #endif
                            tempObj.objMaterials.Add(tempMaterials);
                        }
                        objsInfo.Add(tempObj);
                    }
                }
            }

            if (temp.transform.childCount > 0)
            {
                GetAll(temp);
            }
        }
    }
コード例 #2
0
    /// <summary>
    /// 获取当前物体及子物体  并 记录信息
    /// </summary>
    /// <param name="objs"></param>
    public void GetAndRecordTransform(GameObject objs)
    {
        children.Add(objs);

        //记录 Transform 信息
        if (recordTransform)
        {
            positions.Add(objs.transform.position);
            rotations.Add(objs.transform.rotation);
            enable.Add(objs.activeSelf);
            scales.Add(objs.transform.localScale);
        }

        if (recordObjsInfo)
        {
            if (objs.GetComponent <MeshRenderer>())
            {
                //通过图层过滤物体
                if (objs.layer != 8)
                {
                    int          matsCount = objs.GetComponent <MeshRenderer>().materials.Length;
                    objInfoClass tempObj   = new objInfoClass();
                    tempObj.obj = objs;
                    for (int i = 0; i < matsCount; i++)
                    {
                        MaterialClass tempMatInfo = new MaterialClass();
                        tempMatInfo.shader = objs.GetComponent <MeshRenderer>().materials[i].shader;
                        if (objs.GetComponent <MeshRenderer>().materials[i].HasProperty("_Color"))
                        {
                            tempMatInfo.color = objs.GetComponent <MeshRenderer>().materials[i].color;
                        }
                        tempObj.objMaterials.Add(tempMatInfo);
                    }
                    objsInfo.Add(tempObj);
                }
            }
        }
        // 递归 记录 obj 子物体信息
        foreach (Transform child in objs.transform)
        {
            GetAndRecordTransform(child.gameObject);
        }
    }