Beispiel #1
0
        public static void TryCombine(UnityEngine.GameObject[] gos)
        {
            if (gos != null)
            {
                specTextures.Clear();
                UnityEngine.GameObject shaderroot = null;
                for (int i = 0; i < gos.Length; i++)
                {
                    if (shaderroot == null)
                    {
                        shaderroot = gos[i].transform.parent.gameObject;
                    }
                    //Debug.Log(gos[i].name);
                    XOCp_MaterialRoot mr = gos[i].GetComponent <XOCp_MaterialRoot>();
                    if (mr != null)
                    {
                        if (mr.maintxt != null)
                        {
                            specTextures.Add(mr.maintxt);
                            string          path            = AssetDatabase.GetAssetPath(specTextures[i]);
                            TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;
                            textureImporter.isReadable = true;
                            AssetDatabase.ImportAsset(path);
                            AssetDatabase.Refresh();
                        }
                    }
                }

                matpath = string.Empty;
                Names2Coord.Clear();
                SetupAtlas();
                AtlasCoordinatesDocument();
                SaveAtlas(shaderroot.name);
            }
        }
        public void CreateNodes()
        {
            foreach (string shaderkey in s2o.Keys)
            {
                UnityEngine.GameObject newshaderroot = new UnityEngine.GameObject(shaderkey);
                newshaderroot.isStatic = true;
                UnityEngine.GameObject newshaderroot2 = new UnityEngine.GameObject(shaderkey);
                newshaderroot2.isStatic = true;

                if (newshaderroot != null)
                {
                    newshaderroot.transform.position   = UnityEngine.Vector3.zero;
                    newshaderroot.transform.rotation   = UnityEngine.Quaternion.identity;
                    newshaderroot.transform.localScale = UnityEngine.Vector3.one;
                    newshaderroot.transform.parent     = XOGloble.Output.transform;

                    newshaderroot2.transform.position   = UnityEngine.Vector3.zero;
                    newshaderroot2.transform.rotation   = UnityEngine.Quaternion.identity;
                    newshaderroot2.transform.localScale = UnityEngine.Vector3.one;
                    newshaderroot2.transform.parent     = XOGloble.IterM.transform;

                    int       height   = 0;
                    int       width    = 0;
                    Texture2D _maintxt = null;

                    foreach (string materialkey in s2o[shaderkey].Keys)
                    {
                        List <UnityEngine.GameObject> tlst = s2o[shaderkey][materialkey];
                        if (tlst != null)
                        {
                            UnityEngine.GameObject go = tlst[0];
                            if (go != null)
                            {
                                MeshRenderer lMergedMeshRenderer = go.GetComponent(typeof(MeshRenderer)) as MeshRenderer;
                                _maintxt = lMergedMeshRenderer.sharedMaterial.mainTexture as Texture2D;
                                if (_maintxt != null)
                                {
                                    height = _maintxt.height;
                                    width  = _maintxt.width;
                                }
                            }
                        }

                        string nodename = height.ToString() + "X" + width.ToString() + "-" + materialkey;
                        UnityEngine.GameObject newmaterialroot = new UnityEngine.GameObject(nodename);
                        newmaterialroot.isStatic = true;
                        UnityEngine.GameObject newmaterialroot2 = new UnityEngine.GameObject(nodename);
                        newmaterialroot2.isStatic = true;

                        if (newmaterialroot != null)
                        {
                            newmaterialroot.transform.position   = UnityEngine.Vector3.zero;
                            newmaterialroot.transform.rotation   = UnityEngine.Quaternion.identity;
                            newmaterialroot.transform.localScale = UnityEngine.Vector3.one;
                            newmaterialroot.transform.parent     = newshaderroot.transform;
                            XOCp_MaterialRoot comp = newmaterialroot.AddComponent <XOCp_MaterialRoot>();
                            if (comp != null)
                            {
                                comp.maintxt = _maintxt;
                            }

                            newmaterialroot2.transform.position   = UnityEngine.Vector3.zero;
                            newmaterialroot2.transform.rotation   = UnityEngine.Quaternion.identity;
                            newmaterialroot2.transform.localScale = UnityEngine.Vector3.one;
                            newmaterialroot2.transform.parent     = newshaderroot2.transform;

                            List <UnityEngine.GameObject> lst = s2o[shaderkey][materialkey];
                            foreach (UnityEngine.GameObject go in lst)
                            {
                                //if(CanMerge(go))
                                //{
                                go.transform.parent = newmaterialroot.transform;
                                //}
                                //else
                                //{
                                //  go.transform.parent = newmaterialroot2.transform;
                                //}
                            }
                        }
                    }
                }
            }

            ClearUnusedNodes(XOGloble.IterM);
            ClearUnusedNodes(XOGloble.Output);
        }