private static void CreatePrefab()
 {
     if (Selection.activeGameObject != null)
     {
         if (Selection.activeGameObject.GetComponent<MeshFilter>() != null)
         {
             AssetsReimporter ar = new AssetsReimporter();
             ar.CreateMesh(Selection.activeGameObject,"Assets/SLOMeshes/");
         }
     }
 }
Ejemplo n.º 2
0
 private static void CreatePrefab()
 {
     if (Selection.activeGameObject != null)
     {
         if (Selection.activeGameObject.GetComponent <MeshFilter>() != null)
         {
             AssetsReimporter ar = new AssetsReimporter();
             ar.CreateMesh(Selection.activeGameObject, "Assets/SLOMeshes/");
         }
     }
 }
    public void BakeMeshCombiners()
    {
        MeshCombiner[] meshCombiners = (MeshCombiner[])GameObject.FindObjectsOfType(typeof(MeshCombiner));
        AssetsReimporter reimporter = new AssetsReimporter();

        if (folderPatch[folderPatch.Length - 1] != '/')
            folderPatch = folderPatch + "/";

        foreach(var combine in meshCombiners)
        {
            if (combineState == CombineState.CombineToPrefab)
            {
                combine.combineToPrefab = true;
                combine.folderPatch = folderPatch;
                combine.createEvent += reimporter.CreateMesh;
            }

            combine.CombineChildren();
        }
    }
Ejemplo n.º 4
0
    public void BakeMeshCombiners()
    {
        MeshCombiner[]   meshCombiners = (MeshCombiner[])GameObject.FindObjectsOfType(typeof(MeshCombiner));
        AssetsReimporter reimporter    = new AssetsReimporter();

        if (folderPatch[folderPatch.Length - 1] != '/')
        {
            folderPatch = folderPatch + "/";
        }

        foreach (var combine in meshCombiners)
        {
            if (combineState == CombineState.CombineToPrefab)
            {
                combine.combineToPrefab = true;
                combine.folderPatch     = folderPatch;
                combine.createEvent    += reimporter.CreateMesh;
            }

            combine.CombineChildren();
        }
    }
    private void CreateAtlases(ShadersGroup sg)
    {
        List<Renderer> renderers = new List<Renderer>();

        for (int i = 0; i < sg.gameObjects.Count; i++)
        {
            if (sg.gameObjects[i].GetComponent<Renderer>() != null)
                renderers.Add(sg.gameObjects[i].GetComponent<Renderer>());
            else
                sg.gameObjects.Remove(sg.gameObjects[i]);
        }

        AssetsReimporter tr = new AssetsReimporter();
        tr.Reimport(GetTextures(renderers.ToArray()) as Texture[]);

        Texture2D[] textures = GetTextures(renderers.ToArray());

        if (textures == null || textures.Length == 0 || textures.Length == 1)
            return;

        Texture2D atlas = new Texture2D(32,32,TextureFormat.DXT1,true);
        Material newMaterial = new Material(sg.gameObjects[0].GetComponent<Renderer>().sharedMaterial);

        Rect[] rects = atlas.PackTextures(textures,0,4096,false);

        atlas.Compress(true);
        atlas.Apply();

        newMaterial.mainTexture = atlas as Texture;

        for(int i = 0;i < sg.gameObjects.Count;i++)
        {
            if(rects[i].x == 0 && rects[i].y == 0 && rects[i].width == 1 && rects[i].height == 1)
                continue;

            Vector2[] uv,uvs;

            uv = sg.gameObjects[i].GetComponent<MeshFilter>().sharedMesh.uv;
            uvs = uv;

            float offsetX = 0;
            float offsetY = 0;

            int scaleFactor = 1;

            #region Offset

            for (int c = 0; c < uv.Length; c++)
            {
                if (uv[c].x < offsetX)
                    offsetX = uv[c].x;

                if (uv[c].y < offsetY)
                    offsetY = uv[c].y;
            }

            #endregion

            if (!superOptimization && (offsetX < 0 || offsetY < 0))
                continue;

            #region SetOffset

            for (int c = 0; c < uv.Length; c++)
                uvs[c] = new Vector2(uv[c].x + (-(offsetX)), uv[c].y + (-(offsetY)));

            #endregion

            #region Scale

            for (int c = 0; c < uvs.Length; c++)
            {

                int rounded = 0;
                float value = 0;

                if (uvs[c].x < 0)
                    value = -uvs[c].x;
                else
                    value = uvs[c].x;

                rounded = Mathf.CeilToInt(value);

                if (rounded > scaleFactor)
                    scaleFactor = rounded;

                rounded = 0;
                value = 0;

                if (uv[c].y < 0)
                    value = -uvs[c].y;
                else
                    value = uvs[c].y;

                rounded = Mathf.CeilToInt(value);

                if (rounded > scaleFactor)
                    scaleFactor = rounded;
            }

            #endregion

            if (!superOptimization && scaleFactor > 1)
                continue;

            #region SetScale

            for (int c = 0; c < uvs.Length; c++)
                uvs[c] = new Vector2(uvs[c].x / scaleFactor, uvs[c].y / scaleFactor);

            #endregion

            for (int c = 0; c < uvs.Length; c++)
            {
                uvs[c] = new Vector2((float)(((float)uvs[c].x * (float)rects[i].width) + (float)rects[i].x), (float)(((float)uvs[c].y * (float)rects[i].height) + (float)rects[i].y));
            }

            sg.gameObjects[i].GetComponent<MeshFilter>().sharedMesh.uv = uvs;
            sg.gameObjects[i].GetComponent<Renderer>().sharedMaterial = newMaterial;
            sg.gameObjects[i].GetComponent<Renderer>().sharedMaterial.mainTextureOffset = new Vector2(0, 0);
            sg.gameObjects[i].GetComponent<Renderer>().sharedMaterial.mainTextureScale = new Vector2(1, 1);
        }
    }
Ejemplo n.º 6
0
    private void CreateAtlases(ShadersGroup sg)
    {
        List <Renderer> renderers = new List <Renderer>();

        for (int i = 0; i < sg.gameObjects.Count; i++)
        {
            if (sg.gameObjects[i].GetComponent <Renderer>() != null)
            {
                renderers.Add(sg.gameObjects[i].GetComponent <Renderer>());
            }
            else
            {
                sg.gameObjects.Remove(sg.gameObjects[i]);
            }
        }

        AssetsReimporter tr = new AssetsReimporter();

        tr.Reimport(GetTextures(renderers.ToArray()) as Texture[]);

        Texture2D[] textures = GetTextures(renderers.ToArray());

        if (textures == null || textures.Length == 0 || textures.Length == 1)
        {
            return;
        }

        Texture2D atlas       = new Texture2D(32, 32, TextureFormat.DXT1, true);
        Material  newMaterial = new Material(sg.gameObjects[0].GetComponent <Renderer>().sharedMaterial);

        Rect[] rects = atlas.PackTextures(textures, 0, 4096, false);

        atlas.Compress(true);
        atlas.Apply();

        newMaterial.mainTexture = atlas as Texture;

        for (int i = 0; i < sg.gameObjects.Count; i++)
        {
            if (rects[i].x == 0 && rects[i].y == 0 && rects[i].width == 1 && rects[i].height == 1)
            {
                continue;
            }

            Vector2[] uv, uvs;

            uv  = sg.gameObjects[i].GetComponent <MeshFilter>().sharedMesh.uv;
            uvs = uv;

            float offsetX = 0;
            float offsetY = 0;

            int scaleFactor = 1;

            #region Offset

            for (int c = 0; c < uv.Length; c++)
            {
                if (uv[c].x < offsetX)
                {
                    offsetX = uv[c].x;
                }

                if (uv[c].y < offsetY)
                {
                    offsetY = uv[c].y;
                }
            }

            #endregion

            if (!superOptimization && (offsetX < 0 || offsetY < 0))
            {
                continue;
            }

            #region SetOffset

            for (int c = 0; c < uv.Length; c++)
            {
                uvs[c] = new Vector2(uv[c].x + (-(offsetX)), uv[c].y + (-(offsetY)));
            }

            #endregion

            #region Scale

            for (int c = 0; c < uvs.Length; c++)
            {
                int   rounded = 0;
                float value   = 0;

                if (uvs[c].x < 0)
                {
                    value = -uvs[c].x;
                }
                else
                {
                    value = uvs[c].x;
                }

                rounded = Mathf.CeilToInt(value);

                if (rounded > scaleFactor)
                {
                    scaleFactor = rounded;
                }

                rounded = 0;
                value   = 0;

                if (uv[c].y < 0)
                {
                    value = -uvs[c].y;
                }
                else
                {
                    value = uvs[c].y;
                }

                rounded = Mathf.CeilToInt(value);

                if (rounded > scaleFactor)
                {
                    scaleFactor = rounded;
                }
            }

            #endregion

            if (!superOptimization && scaleFactor > 1)
            {
                continue;
            }

            #region SetScale

            for (int c = 0; c < uvs.Length; c++)
            {
                uvs[c] = new Vector2(uvs[c].x / scaleFactor, uvs[c].y / scaleFactor);
            }

            #endregion

            for (int c = 0; c < uvs.Length; c++)
            {
                uvs[c] = new Vector2((float)(((float)uvs[c].x * (float)rects[i].width) + (float)rects[i].x), (float)(((float)uvs[c].y * (float)rects[i].height) + (float)rects[i].y));
            }

            sg.gameObjects[i].GetComponent <MeshFilter>().sharedMesh.uv = uvs;
            sg.gameObjects[i].GetComponent <Renderer>().sharedMaterial  = newMaterial;
            sg.gameObjects[i].GetComponent <Renderer>().sharedMaterial.mainTextureOffset = new Vector2(0, 0);
            sg.gameObjects[i].GetComponent <Renderer>().sharedMaterial.mainTextureScale  = new Vector2(1, 1);
        }
    }