private static void CreatePrefab() { if (Selection.activeGameObject != null) { if (Selection.activeGameObject.GetComponent<MeshFilter>() != null) { AssetsReimporter ar = new AssetsReimporter(); ar.CreateMesh(Selection.activeGameObject,"Assets/SLOMeshes/"); } } }
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(); } }
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); } }
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); } }