protected static void Start() { uvSaveWindow = (WindowUVSave)EditorWindow.GetWindow(typeof(WindowUVSave)); }
private void OnGUI() { selectedObject = Selection.activeGameObject; if (selectedObject == null) { GUI.color = Color.gray; EditorGUILayout.HelpBox("Select the object...", MessageType.Warning); canDrawView = false; } else { if (selectedObject.GetComponent <MeshFilter>() != null | selectedObject.GetComponent <SkinnedMeshRenderer>() != null) { GUI.color = Color.green; EditorGUILayout.HelpBox("Selected object: " + selectedObject.name, MessageType.None); GUI.color = Color.white; if (selectedObject.GetComponent <SkinnedMeshRenderer>() == null) { m = selectedObject.GetComponent <MeshFilter>().sharedMesh; if (selectedObject.GetComponent <MeshRenderer>().sharedMaterial.mainTexture != null) { List <Texture> TexList = new List <Texture>(); List <string> StringList = new List <string>(); List <int> IntList = new List <int>(); for (int i = 0; i < selectedObject.GetComponent <MeshRenderer>().sharedMaterials.Length; i++) { TexList.Add(selectedObject.GetComponent <MeshRenderer>().sharedMaterials[i].mainTexture); StringList.Add(selectedObject.GetComponent <MeshRenderer>().sharedMaterials[i].mainTexture.name); IntList.Add(i); } Tex = TexList.ToArray(); TexName = StringList.ToArray(); IntIndex = IntList.ToArray(); } else { List <Texture> TexList = new List <Texture>(); List <string> StringList = new List <string>(); List <int> IntList = new List <int>(); TexList.Add((Texture)CreateFillTexture(1, 1, new Color(0, 0, 0, 0.1f))); StringList.Add("empty"); IntList.Add(0); Tex = TexList.ToArray(); TexName = StringList.ToArray(); IntIndex = IntList.ToArray(); } } else { m = selectedObject.GetComponent <SkinnedMeshRenderer>().sharedMesh; if (selectedObject.GetComponent <SkinnedMeshRenderer>().sharedMaterial.mainTexture != null) { List <Texture> TexList = new List <Texture>(); List <string> StringList = new List <string>(); List <int> IntList = new List <int>(); for (int i = 0; i < selectedObject.GetComponent <SkinnedMeshRenderer>().sharedMaterials.Length; i++) { TexList.Add(selectedObject.GetComponent <SkinnedMeshRenderer>().sharedMaterials[i].mainTexture); StringList.Add(selectedObject.GetComponent <SkinnedMeshRenderer>().sharedMaterials[i].mainTexture.name); IntList.Add(i); } Tex = TexList.ToArray(); TexName = StringList.ToArray(); IntIndex = IntList.ToArray(); } else { List <Texture> TexList = new List <Texture>(); List <string> StringList = new List <string>(); List <int> IntList = new List <int>(); TexList.Add((Texture)CreateFillTexture(1, 1, new Color(0, 0, 0, 0.1f))); StringList.Add("empty"); IntList.Add(0); Tex = TexList.ToArray(); TexName = StringList.ToArray(); IntIndex = IntList.ToArray(); } } if (m != null) { GUILayout.BeginHorizontal(); selectedUV = GUILayout.Toolbar(selectedUV, selectedUVStrings); canDrawView = true; SubMeshIndex = EditorGUILayout.IntPopup(SubMeshIndex, TexName, IntIndex); //Debug.Log("SubMeshIndex"+SubMeshIndex); //BackgroundTexture = (BackgroundTextureMode)EditorGUILayout.EnumPopup(BackgroundTexture, GUILayout.Width(85)); GUILayout.EndHorizontal(); //GUILayout.Space(10f); GUILayout.BeginHorizontal(); if (GUILayout.Button("Save To PNG")) { WindowUVSave uvSave = (WindowUVSave)EditorWindow.GetWindow(typeof(WindowUVSave)); uvSave.titleContent = new GUIContent("Save to PNG"); uvSave.maxSize = new Vector2(256, 125); uvSave.minSize = new Vector2(256, 124); uvSave.uvsToRender = uvs; uvSave.trianglesToRender = tris; } //画笔设置 UVColor = EditorGUILayout.ColorField(UVColor, GUILayout.Width(85)); GUILayout.EndHorizontal(); switch (selectedUV) { case 0: if (m.uv.Length > 0) { GUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("Mesh UV 1 缩略图:", MessageType.None); //if (Mat.Count > 0) //{ // List<string> matsName = null; // int[] matsInt = new int[Mat.Count]; // foreach (var item in Mat) // { // matsName.Add(item.name); // } // Textureindex = EditorGUILayout.IntPopup(Textureindex, matsName.ToArray(), matsInt); //} uvs = m.uv; GUILayout.EndHorizontal(); } else { EditorGUILayout.HelpBox("Mesh无UV 1", MessageType.None); } break; case 1: GUILayout.BeginHorizontal(); if (m.uv2.Length > 0) { EditorGUILayout.HelpBox("Mesh UV2 缩略图:", MessageType.None); uvs = m.uv2; } else { EditorGUILayout.HelpBox("Mesh没有UV2. 点击Generate UV2生成", MessageType.None); if (GUILayout.Button("Generate UV2")) { Unwrapping.GenerateSecondaryUVSet(m); EditorApplication.Beep(); EditorUtility.DisplayDialog("Done", "Process is done!", "OK"); } } GUILayout.EndHorizontal(); break; case 2: if (m.uv3.Length > 0) { EditorGUILayout.HelpBox("Mesh UV3 缩略图:", MessageType.None); uvs = m.uv3; } else { EditorGUILayout.HelpBox("Mesh 无 UV3", MessageType.None); } break; case 3: if (m.uv4.Length > 0) { EditorGUILayout.HelpBox("Mesh UV4 缩略图:", MessageType.None); uvs = m.uv4; } else { EditorGUILayout.HelpBox("Mesh 无 UV4", MessageType.None); } break; } } BaseTexture = (Texture2D)Tex[SubMeshIndex]; } else { GUI.color = Color.gray; EditorGUILayout.HelpBox("Object must have a Mesh Filter or Skinned Mesh Renderer", MessageType.Warning); canDrawView = false; } } //BaseTexture = CreateFillTexture(256, 256, new Color(1, 1, 1, 1f)); //uvPreviewRect = new Rect(new Rect(sideSpace, ySpace + sideSpace, uvPreviewWindow.position.width - (sideSpace * 2), uvPreviewWindow.position.height - ySpace - (sideSpace * 2))); //GUI.DrawTexture(new Rect(0, 0, uvPreviewWindow.position.width, ySpace), BaseTexture); if (canDrawView) { tris = m.GetTriangles(SubMeshIndex); //tris = m.triangles; uvPreviewRect = new Rect(sideSpace, ySpace, (int)(uvPreviewWindow.position.width - 10), (int)(uvPreviewWindow.position.width - 10)); GUI.DrawTexture(uvPreviewRect, BaseTexture); //GUI.DrawTexture(uvPreviewRect, BaseTexture); windowDefaultSize = (int)(uvPreviewWindow.position.width - 10); //UV for (int i = 0; i < tris.Length; i += 3) { int line1x1 = (int)(uvs[tris[i]].x * (scale * windowDefaultSize) + sideSpace); int line1y1 = (int)(-uvs[tris[i]].y * (scale * windowDefaultSize) + ySpace) + windowDefaultSize; int line1x2 = (int)(uvs[tris[i + 1]].x * (scale * windowDefaultSize) + sideSpace); int line1y2 = (int)(-uvs[tris[i + 1]].y * (scale * windowDefaultSize) + ySpace + windowDefaultSize); int line2x1 = (int)(uvs[tris[i + 1]].x * (scale * windowDefaultSize) + sideSpace); int line2y1 = (int)(-uvs[tris[i + 1]].y * (scale * windowDefaultSize) + ySpace) + windowDefaultSize; int line2x2 = (int)(uvs[tris[i + 2]].x * (scale * windowDefaultSize) + sideSpace); int line2y2 = (int)(-uvs[tris[i + 2]].y * (scale * windowDefaultSize) + ySpace) + windowDefaultSize; int line3x1 = (int)(uvs[tris[i + 2]].x * (scale * windowDefaultSize) + sideSpace); int line3y1 = (int)(-uvs[tris[i + 2]].y * (scale * windowDefaultSize) + ySpace) + windowDefaultSize; int line3x2 = (int)(uvs[tris[i]].x * (scale * windowDefaultSize) + sideSpace); int line3y2 = (int)(-uvs[tris[i]].y * (scale * windowDefaultSize) + ySpace) + windowDefaultSize; Rect cropRect = new Rect(uvPreviewRect.x, uvPreviewRect.y, uvPreviewRect.width + sideSpace, uvPreviewRect.height + ySpace + sideSpace); DrawLine(line1x1, line1y1, line1x2, line1y2, new Color(0, 1, 0, 1), true, cropRect); DrawLine(line2x1, line2y1, line2x2, line2y2, new Color(0, 1, 0, 1), true, cropRect); DrawLine(line3x1, line3y1, line3x2, line3y2, new Color(0, 1, 0, 1), true, cropRect); } } }