Esempio n. 1
0
        public static UnityEngine.GameObject NewIterM(UnityEngine.GameObject origin)
        {
            UnityEngine.GameObject backobj = UnityEngine.GameObject.Instantiate(origin, origin.transform.position, origin.transform.rotation) as UnityEngine.GameObject;
            backobj.transform.parent     = XOGloble.IterM.transform;
            backobj.transform.localScale = origin.transform.lossyScale;
            backobj.name = XOUtil.Path(origin);
            XOCp_MarkIntermediate mi = backobj.AddComponent <XOCp_MarkIntermediate>();

            mi.OriginInstID = origin.GetInstanceID();
            mi.goOrigin     = origin;
            backobj.SetActive(true);

            XOCp_OptimizerHandler xoh = XOGloble.Root.GetComponent <XOCp_OptimizerHandler>();

            if (xoh != null)
            {
                xoh.AddObjLstByShaderMaterial(backobj);
            }

            XOUtil.Display(backobj, false);
            return(backobj);
        }
Esempio n. 2
0
        public static void ExtractMaterialMeshes(UnityEngine.GameObject rObject)
        {
            if (rObject == null)
            {
                return;
            }
            if (!rObject.activeInHierarchy)
            {
                return;
            }

            // If this object has a mesh, extract it
            MeshFilter lMeshFilter = rObject.GetComponent <MeshFilter>();

            if (lMeshFilter == null)
            {
                return;
            }

            // Ensure we're only extracting rendered meshes
            MeshRenderer lMeshRenderer = rObject.GetComponent <MeshRenderer>();

            if (lMeshRenderer == null)
            {
                return;
            }

            // We need to break the mesh into it's sub mesh parts so we can assign materials
            Mesh     lMesh     = null;
            Material lMaterial = null;

            int lSubMeshCount = lMeshFilter.sharedMesh.subMeshCount;

            for (int i = 0; i < lSubMeshCount; i++)
            {
                // This is easy, use the shared instance
                if (i == 0)
                {
                    lMesh     = lMeshFilter.sharedMesh;
                    lMaterial = lMeshRenderer.sharedMaterial;
                }
                // Process each sub-mesh individually
                else
                {
                    // Create a mesh from the sub-mesh
                    lMesh = CreateMesh(lMeshFilter.sharedMesh, i);

                    // Find the material it's using
                    if (lMeshRenderer.sharedMaterials.Length > i)
                    {
                        lMaterial = lMeshRenderer.sharedMaterials[i];
                    }
                    else
                    {
                        lMaterial = lMeshRenderer.sharedMaterials[lMeshRenderer.sharedMaterials.Length - 1];
                    }
                }

                string newname = "split-" + rObject.name + i;
                UnityEngine.GameObject newobj = new UnityEngine.GameObject(newname);
                newobj.transform.parent     = XOGloble.IterM.transform;
                newobj.transform.position   = lMeshFilter.transform.position;
                newobj.transform.rotation   = lMeshFilter.transform.rotation;
                newobj.transform.localScale = lMeshFilter.transform.lossyScale;


                newobj.isStatic = true;


                MeshFilter lMergedMeshFilter = newobj.AddComponent(typeof(MeshFilter)) as MeshFilter;
                lMergedMeshFilter.mesh = lMesh;


                // CombineInstance[] lMeshes = new CombineInstance[1];
                // lMeshes[0].transform = lMeshFilter.transform.localToWorldMatrix;
                // lMeshes[0].mesh = lMesh;

                lMergedMeshFilter.sharedMesh.name = "Merged Mesh of " + lSubMeshCount + " items";
                // lMergedMeshFilter.sharedMesh.CombineMeshes(lMeshes, true);
                // Unwrapping.GenerateSecondaryUVSet(lMergedMeshFilter.sharedMesh);



                MeshRenderer lMergedMeshRenderer = newobj.AddComponent(typeof(MeshRenderer)) as MeshRenderer;
                lMergedMeshRenderer.sharedMaterial = lMaterial;

                XOCp_OptimizerHandler xoh = XOGloble.Root.GetComponent <XOCp_OptimizerHandler>();
                if (xoh != null)
                {
                    xoh.nlst.Add(newobj);
                    xoh.AddObjLstByShaderMaterial(newobj);
                }
            }
        }