Пример #1
0
    public static void Export()
    {
        var p = EditorPrefs.GetString("projectPath");

        if (Directory.Exists(p))
        {
            Terrn.ExportTerrn();
            Terrn.ExportTextures();
            Tobj.Export();
            Otc.ExportMain();
            Otc.ExportPage();
            var root = GameObject.Find("root");
            if (root != null)
            {
                var objectExported = new List <string>();
                var meshesExported = new List <string>();
                foreach (Transform child in root.transform)
                {
                    if (!objectExported.Contains(child.name) && child.tag != "DefaultContent")
                    {
                        objectExported.Add(child.name);
                        Odef.Export(child.gameObject);

                        /*
                         * var m = child.GetComponentsInChildren<MeshFilter>();
                         * var mr = child.GetComponentsInChildren<MeshRenderer>();
                         *
                         *
                         * if (m.Length > 1 && !meshesExported.Contains(m[0].sharedMesh.name))
                         * {
                         *  var combinedMesh = new Mesh();
                         *  var combineIns = new List<CombineInstance>();
                         *  var materials = new List<Material>();
                         *  for (var i = 0; i < m.Length; i++)
                         *  {
                         *      print("combing " + m[i].sharedMesh.name);
                         *      combineIns.Add(new CombineInstance
                         *      {
                         *          mesh = m[i].sharedMesh,
                         *          transform = m[i].transform.worldToLocalMatrix
                         *
                         *      });
                         *      materials.AddRange(mr[i].sharedMaterials);
                         *  }
                         *  combinedMesh.name = m[0].sharedMesh.name;
                         *  materials = materials.Distinct().ToList();
                         *  combinedMesh.CombineMeshes(combineIns.ToArray(), false);
                         *  Meshes.Export(combinedMesh, materials.ToArray());
                         *  Materials.Export(materials.ToArray());
                         *  meshesExported.Add(combinedMesh.name);
                         * }
                         * else if (m.Length == 1 && !meshesExported.Contains(m[0].sharedMesh.name))
                         * {
                         *  Meshes.Export(m[0].sharedMesh, mr[0].sharedMaterials);
                         *  Materials.Export(mr[0].sharedMaterials);
                         *  meshesExported.Add(m[0].sharedMesh.name);
                         * }
                         */
                    }
                }

                var m  = root.GetComponentsInChildren <MeshFilter>();
                var mr = root.GetComponentsInChildren <MeshRenderer>();

                if (m.Length > 0)
                {
                    for (var i = 0; i < m.Length; i++)
                    {
                        if (!meshesExported.Contains(m[i].sharedMesh.name) && m[i].gameObject.tag != "DefaultContent")
                        {
                            Meshes.Export(m[i].sharedMesh, mr[i].sharedMaterials);
                            Materials.Export(mr[i].sharedMaterials);
                            meshesExported.Add(m[i].sharedMesh.name);
                        }
                    }
                }
            }
        }
    }
 public void testmeshexp()
 {
     Meshes.Export(GetComponent <MeshFilter>().sharedMesh, GetComponent <MeshRenderer>().sharedMaterials);
 }
Пример #3
0
        public IndexedResource <Transform> ForceExport(Transform trans)
        {
            var go = trans.gameObject;

            IndexedResource <Mesh> meshResource = null;
            int?skinIndex = null;
            var mr        = go.GetComponent <MeshRenderer>();
            var smr       = go.GetComponent <SkinnedMeshRenderer>();

            if (mr != null)
            {
                var meshFilter = mr.gameObject.GetComponent <MeshFilter>();
                var sharedMesh = meshFilter.sharedMesh;

                meshResource = Meshes.Export(mr, sharedMesh);
            }
            else if (smr != null)
            {
                var sharedMesh = smr.sharedMesh;
                meshResource = Meshes.Export(smr, sharedMesh);

                if (smr.bones.Length > 0)
                {
                    skinIndex = ExportSkin(smr, sharedMesh).Index;
                }
            }

            var t        = CoordUtils.ConvertSpace(go.transform.localPosition);
            var r        = CoordUtils.ConvertSpace(go.transform.localRotation);
            var s        = go.transform.localScale;
            var gltfNode = new Types.Node
            {
                Name = go.name,

                Mesh = meshResource != null ? (int?)meshResource.Index : null,
                Skin = skinIndex,

                Matrix      = null,
                Translation = new float[] { t.x, t.y, t.z },
                Rotation    = new float[] { r.x, r.y, r.z, r.w },
                Scale       = new float[] { s.x, s.y, s.z },
            };

            var nodesIndices = new List <int>();

            for (int i = 0; i < go.transform.childCount; ++i)
            {
                var c            = go.transform.GetChild(i);
                var nodeResource = Export(c.gameObject);
                nodesIndices.Add(nodeResource.Index);
            }
            if (nodesIndices.Count > 0)
            {
                gltfNode.Children = nodesIndices.ToArray();
            }

            foreach (var h in Hooks)
            {
                h.PostHook(this, trans, gltfNode);
            }

            return(new IndexedResource <Transform>
            {
                Index = Types.GltfExtensions.AddNode(Gltf, gltfNode),
                Value = trans,
            });
        }