Esempio n. 1
0
        private void OnGUI()
        {
            if (m_tmpMeta == null)
            {
                // OnDisable
                return;
            }

            EditorGUIUtility.labelWidth = 150;

            // lang
            M17N.Getter.OnGuiSelectLang();

            EditorGUILayout.LabelField("ExportRoot");
            {
                var root = (GameObject)EditorGUILayout.ObjectField(ExportRoot, typeof(GameObject), true);
                UpdateRoot(root);
            }

            // ArgumentException: Getting control 1's position in a group with only 1 controls when doing repaint Aborting
            // Validation により GUI の表示項目が変わる場合があるので、
            // EventType.Layout と EventType.Repaint 間で内容が変わらないようしている。
            if (Event.current.type == EventType.Layout)
            {
                Validate();
            }

            //
            // Humanoid として適正か? ここで失敗する場合は Export UI を表示しない
            //
            if (!m_validator.RootAndHumanoidCheck(ExportRoot, m_settings, m_meshes.Meshes))
            {
                return;
            }

            EditorGUILayout.HelpBox($"Mesh size: {m_meshes.ExpectedExportByteSize / 1000000.0f:0.0} MByte", MessageType.Info);
            _tab = TabBar.OnGUI(_tab, TabButtonStyle, TabButtonSize);

            // Render contents using Generic Inspector GUI
            m_ScrollPosition = BeginVerticalScrollView(m_ScrollPosition, false, GUI.skin.verticalScrollbar, "OL Box");
            GUIUtility.GetControlID(645789, FocusType.Passive);

            //
            // VRM の Validation
            //
            foreach (var v in m_validator.Validations)
            {
                v.DrawGUI();
            }
            foreach (var meshInfo in m_meshes.Meshes)
            {
                switch (meshInfo.VertexColor)
                {
                case UniGLTF.MeshExportInfo.VertexColorState.ExistsAndMixed:
                    Validation.Warning($"{meshInfo.Renderer}: Both vcolor.multiply and not multiply unlit materials exist").DrawGUI();
                    break;
                }
            }

            bool modified = DrawWizardGUI();

            EditorGUILayout.EndScrollView();

            // Create and Other Buttons
            {
                // errors
                GUILayout.BeginVertical();
                // GUILayout.FlexibleSpace();

                {
                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUI.enabled = m_validator.IsValid;

                    if (GUILayout.Button("Export", GUILayout.MinWidth(100)))
                    {
                        OnWizardCreate();
                        Close();
                        GUIUtility.ExitGUI();
                    }
                    GUI.enabled = true;

                    GUILayout.EndHorizontal();
                }
                GUILayout.EndVertical();
            }

            GUILayout.Space(8);

            if (modified)
            {
                m_requireValidation = true;
                Repaint();
            }
        }
        private void OnGUI()
        {
            if (m_tmpMeta == null)
            {
                // OnDisable
                return;
            }

            EditorGUIUtility.labelWidth = 150;

            // lang
            M17N.Getter.OnGuiSelectLang();

            EditorGUILayout.LabelField("ExportRoot");
            {
                var root = (GameObject)EditorGUILayout.ObjectField(ExportRoot, typeof(GameObject), true);
                UpdateRoot(root);
            }

            if (Event.current.type == EventType.Layout)
            {
                // ArgumentException: Getting control 1's position in a group with only 1 controls when doing repaint Aborting
                // Validation により GUI の表示項目が変わる場合があるので、
                // EventType.Layout と EventType.Repaint 間で内容が変わらないようしている。
                if (m_requireValidation)
                {
                    m_validator.Validate(ExportRoot, m_settings, Meta != null ? Meta : m_tmpMeta);
                    m_requireValidation = false;
                }
            }

            //
            // Humanoid として適正か? ここで失敗する場合は Export UI を表示しない
            //
            if (!m_validator.RootAndHumanoidCheck(ExportRoot, m_settings))
            {
                return;
            }

            EditorGUILayout.HelpBox($"Mesh size: {m_validator.ExpectedByteSize / 1000000.0f:0.0} MByte", MessageType.Info);

            _tab = TabBar.OnGUI(_tab, TabButtonStyle, TabButtonSize);

            // Render contents using Generic Inspector GUI
            m_ScrollPosition = BeginVerticalScrollView(m_ScrollPosition, false, GUI.skin.verticalScrollbar, "OL Box");
            GUIUtility.GetControlID(645789, FocusType.Passive);

            //
            // VRM の Validation
            //
            foreach (var v in m_validator.Validations)
            {
                v.DrawGUI();
            }

            bool modified = DrawWizardGUI();

            EditorGUILayout.EndScrollView();

            // Create and Other Buttons
            {
                // errors
                GUILayout.BeginVertical();
                // GUILayout.FlexibleSpace();

                {
                    GUILayout.BeginHorizontal();
                    GUILayout.FlexibleSpace();
                    GUI.enabled = m_validator.IsValid;

                    const BindingFlags kInstanceInvokeFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy;
                    if (m_OtherButton != "" && GUILayout.Button(m_OtherButton, GUILayout.MinWidth(100)))
                    {
                        MethodInfo method = GetType().GetMethod("OnWizardOtherButton", kInstanceInvokeFlags);
                        if (method != null)
                        {
                            method.Invoke(this, null);
                            GUIUtility.ExitGUI();
                        }
                        else
                        {
                            Debug.LogError("OnWizardOtherButton has not been implemented in script");
                        }
                    }

                    if (m_CreateButton != "" && GUILayout.Button(m_CreateButton, GUILayout.MinWidth(100)))
                    {
                        MethodInfo method = GetType().GetMethod("OnWizardCreate", kInstanceInvokeFlags);
                        if (method != null)
                        {
                            method.Invoke(this, null);
                        }
                        else
                        {
                            Debug.LogError("OnWizardCreate has not been implemented in script");
                        }
                        Close();
                        GUIUtility.ExitGUI();
                    }
                    GUI.enabled = true;

                    GUILayout.EndHorizontal();
                }
                GUILayout.EndVertical();
            }

            GUILayout.Space(8);

            if (modified)
            {
                m_requireValidation = true;
                Repaint();
            }
        }