コード例 #1
0
        void OnEnable()
        {
            #if (UNITY_5_0)
            title = "UV Inspector";
            #else
            titleContent = new GUIContent("UV Inspector");
            #endif

            this.minSize = new Vector2(350, 400);

            previewUVSet             = (UVSet)EditorPrefs.GetInt("nTools.UVInspector.previewUVSet", (int)previewUVSet);
            subMeshToggleField       = EditorPrefs.GetInt("nTools.UVInspector.subMeshToggleField", subMeshToggleField.bitfield);
            showVertexColors         = EditorPrefs.GetBool("nTools.UVInspector.showVertexColors", showVertexColors);
            showGrid                 = EditorPrefs.GetBool("nTools.UVInspector.showGrid", showGrid);
            showSubmeshesByOne       = EditorPrefs.GetBool("nTools.UVInspector.showSubmeshesByOne", showSubmeshesByOne);
            tilePreviewTexture       = EditorPrefs.GetBool("nTools.UVInspector.tilePreviewTexture", tilePreviewTexture);
            previewTextureSource     = (PreviewTextureSource)EditorPrefs.GetInt("nTools.UVInspector.previewTextureSource", (int)previewTextureSource);
            customPreviewTexture     = (Texture2D)AssetDatabase.LoadAssetAtPath(EditorPrefs.GetString("nTools.UVInspector.customPreviewTexture", ""), typeof(Texture2D));
            previewTextureTintColor  = IntToColor(EditorPrefs.GetInt("nTools.UVInspector.previewTextureTintColor", ColorToInt(previewTextureTintColor)));
            preferredTextureProperty = EditorPrefs.GetString("nTools.UVInspector.preferredTextureProperty", preferredTextureProperty);
            previewTextureChannels   = (ColorChannels)EditorPrefs.GetInt("nTools.UVInspector.previewTextureChannels", (int)previewTextureChannels);
            settingsFoldout          = EditorPrefs.GetBool("nTools.UVInspector.settingsFoldout", settingsFoldout);
            previewFoldout           = EditorPrefs.GetBool("nTools.UVInspector.previewFoldout", previewFoldout);


            if (!LoadMaterials())
            {
                Debug.LogWarning("UV Inspector Error: shaders not found. Reimport asset.");
                Close();
                return;
            }

            #if NO_ON_SELECTION_CHANGED
            if (EditorApplication.update != OnEditorUpdate)
            {
                EditorApplication.update += OnEditorUpdate;
            }
            #else
            if (Selection.selectionChanged != OnSelectionChanged)
            {
                Selection.selectionChanged += OnSelectionChanged;
            }
            #endif

            LoadMeshes();
        }
コード例 #2
0
        void OnGUI()
        {
            if (uvPreviewMaterial == null || simpleMaterial == null)
            {
                if (!LoadMaterials())
                {
                    return;
                }
            }

            for (int i = 0; i < inspectedObjects.Count; i++)
            {
                if (inspectedObjects[i].obj == null)
                {
                    inspectedObjects.RemoveAt(i);
                    i = 0;
                }
            }

            scroolPosition = EditorGUILayout.BeginScrollView(scroolPosition);

            EditorGUILayout.BeginVertical();

            Rect logoRect = EditorGUILayout.GetControlRect(GUILayout.Height(56));

            if (Event.current.type == EventType.Repaint)
            {
                Styles.logoFont.Draw(logoRect, "nTools|UVInspector", false, false, false, false);
            }



            // info box
            if (inspectedObjects.Count == 0)
            {
                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                EditorGUILayout.LabelField("Select object with mesh.");
                EditorGUILayout.EndVertical();
            }
            else if (inspectedObjects.Count == 1)
            {
                StringBuilder   sb  = new StringBuilder();
                InspectedObject obj = inspectedObjects[0];

                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                EditorGUILayout.LabelField("Object: " + obj.obj.name + ", Mesh: " + obj.mesh.name);

                sb.AppendFormat("Submeshes: {0}", obj.subMeshCount);
                sb.AppendFormat(", Triangles: {0}", obj.triangleCount);
                sb.AppendFormat(", Vertices: {0}", obj.vertexCount);
                if (obj.hasColors)
                {
                    sb.Append(", Colors");
                }
                if (obj.hasUV[0])
                {
                    sb.Append(", UV1");
                }
                if (obj.hasUV[1])
                {
                    sb.Append(", UV2");
                }
                if (obj.hasUV[2])
                {
                    sb.Append(", UV3");
                }
                if (obj.hasUV[3])
                {
                    sb.Append(", UV4");
                }

                EditorGUILayout.LabelField(sb.ToString());
                EditorGUILayout.EndVertical();
            }
            else
            {
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < inspectedObjects.Count; i++)
                {
                    sb.Append(inspectedObjects[i].obj.name + "(" + inspectedObjects[i].mesh.name + "), ");
                }

                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                EditorGUILayout.LabelField("Multiple objects:");
                EditorGUILayout.LabelField(sb.ToString(), EditorStyles.wordWrappedMiniLabel);
                EditorGUILayout.EndVertical();
            }



            // UI Window
            float previewWindowHeight = Mathf.Min(EditorGUIUtility.currentViewWidth, this.position.height * 0.75f);
            Rect  previewWindowRect   = EditorGUILayout.GetControlRect(GUILayout.Height(previewWindowHeight));

            UVPreviewWindow(previewWindowRect);



            if (inspectedObjects.Count == 1 && !inspectedObjects[0].hasUV[(int)previewUVSet])
            {
                EditorGUI.LabelField(previewWindowRect, "Unassigned UV Channel", Styles.hudFont);
            }



            // Toolbar buttons
            EditorGUILayout.BeginHorizontal();

            showGrid           = GUILayout.Toggle(showGrid, "Grid", EditorStyles.toolbarButton);
            showVertexColors   = GUILayout.Toggle(showVertexColors, "Vertex Colors", EditorStyles.toolbarButton);
            tilePreviewTexture = GUILayout.Toggle(tilePreviewTexture, "Texture Tiles", EditorStyles.toolbarButton);
            GUI.enabled        = IsCanFrameSelected();

            if (GUILayout.Toggle(false, "Frame View", EditorStyles.toolbarButton, GUILayout.MaxWidth(80)))
            {
                FrameSelected();
            }
            GUI.enabled = true;


            if (GUILayout.Toggle(false, "Reset View", EditorStyles.toolbarButton, GUILayout.MaxWidth(80)))
            {
                previewWindowPosition = new Vector2(-0.5f, -0.5f);

                float aspect = Mathf.Min(viewportSize.x, viewportSize.y) / Mathf.Max(viewportSize.x, viewportSize.y, 1);
                previewWindowScale = 1.8f * aspect;
            }

            EditorGUILayout.EndHorizontal();



            if (previewFoldout = nGUI.Foldout(previewFoldout, "Preview"))
            {
                ++EditorGUI.indentLevel;

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("UV Channel");
                previewUVSet = (UVSet)GUILayout.Toolbar((int)previewUVSet, Styles.uvSetNames, GUILayout.MaxWidth(160), GUILayout.Height(20));
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.PrefixLabel("Sub Mesh");
                if (inspectedObjects.Count == 1)
                {
                    SubMeshToolbar(inspectedObjects[0].mesh.subMeshCount);
                }
                else
                {
                    GUI.enabled = false;
                    GUI.Button(EditorGUILayout.GetControlRect(GUILayout.MaxWidth(160), GUILayout.Height(20)), inspectedObjects.Count > 1 ? "<Multyply Objects>" : "---");
                    GUI.enabled = true;
                }
                EditorGUILayout.EndHorizontal();



                previewTextureSource = (PreviewTextureSource)EditorGUILayout.EnumPopup("Preview Texture", previewTextureSource);

                ++EditorGUI.indentLevel;
                if (previewTextureSource == PreviewTextureSource.Custom)
                {
                    previewTextureTintColor = EditorGUILayout.ColorField("Image Tint", previewTextureTintColor);

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel("Color Channel");
                    previewTextureChannels = (ColorChannels)GUILayout.Toolbar((int)previewTextureChannels, Styles.colorChannelsNames, GUILayout.MaxWidth(160), GUILayout.Height(20));
                    EditorGUILayout.EndHorizontal();

                    customPreviewTexture = (Texture2D)EditorGUILayout.ObjectField("Image", customPreviewTexture, typeof(Texture2D), false);
                }
                else if (previewTextureSource == PreviewTextureSource.FromMaterial)
                {
                    PreviewTextureGUI();
                    previewTextureTintColor = EditorGUILayout.ColorField("Image Tint", previewTextureTintColor);
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel("Color Channel");
                    previewTextureChannels = (ColorChannels)GUILayout.Toolbar((int)previewTextureChannels, Styles.colorChannelsNames, GUILayout.MaxWidth(160), GUILayout.Height(20));
                    EditorGUILayout.EndHorizontal();
                }
                --EditorGUI.indentLevel;

                --EditorGUI.indentLevel;
            }



            EditorGUILayout.EndVertical();

            EditorGUILayout.EndScrollView();
        }