diff --git a/Assets/VRM/UniVRM/Editor/Format/VRMExportSettings.cs b/Assets/VRM/UniVRM/Editor/Format/VRMExportSettings.cs
index 10c17bfea..368a602cf 100644
--- a/Assets/VRM/UniVRM/Editor/Format/VRMExportSettings.cs
+++ b/Assets/VRM/UniVRM/Editor/Format/VRMExportSettings.cs
@@ -5,7 +5,6 @@ using UniGLTF;
using UnityEditor;
using UnityEngine;
-
namespace VRM
{
[Serializable]
@@ -98,32 +97,6 @@ namespace VRM
return fileName.Length > 64;
}
- public struct Validation
- {
- ///
- /// エクスポート可能か否か。
- /// true のメッセージは警告
- /// false のメッセージはエラー
- ///
- public readonly bool CanExport;
- public readonly String Message;
-
- Validation(bool canExport, string message)
- {
- CanExport = canExport;
- Message = message;
- }
-
- public static Validation Error(string msg)
- {
- return new Validation(false, msg);
- }
-
- public static Validation Warning(string msg)
- {
- return new Validation(true, msg);
- }
- }
///
/// ボーン名の重複を確認
@@ -165,23 +138,26 @@ namespace VRM
{
yield return Validation.Error("Require animator. ");
}
- else if (animator.avatar == null)
+ else
{
- yield return Validation.Error("Require animator.avatar. ");
- }
- else if (!animator.avatar.isValid)
- {
- yield return Validation.Error("Animator.avatar is not valid. ");
- }
- else if (!animator.avatar.isHuman)
- {
- yield return Validation.Error("Animator.avatar is not humanoid. Please change model's AnimationType to humanoid. ");
- }
+ if (animator.avatar == null)
+ {
+ yield return Validation.Error("Require animator.avatar. ");
+ }
+ else if (!animator.avatar.isValid)
+ {
+ yield return Validation.Error("Animator.avatar is not valid. ");
+ }
+ else if (!animator.avatar.isHuman)
+ {
+ yield return Validation.Error("Animator.avatar is not humanoid. Please change model's AnimationType to humanoid. ");
+ }
- var jaw = animator.GetBoneTransform(HumanBodyBones.Jaw);
- if (jaw != null)
- {
- yield return Validation.Warning("Jaw bone is included. It may not be what you intended. Please check the humanoid avatar setting screen");
+ var jaw = animator.GetBoneTransform(HumanBodyBones.Jaw);
+ if (jaw != null)
+ {
+ yield return Validation.Warning("Jaw bone is included. It may not be what you intended. Please check the humanoid avatar setting screen");
+ }
}
if (DuplicateBoneNameExists())
@@ -189,19 +165,6 @@ namespace VRM
yield return Validation.Warning("There is a bone with the same name in the hierarchy. If exported, these bones will be automatically renamed.");
}
- // if (string.IsNullOrEmpty(Title))
- // {
- // yield return Validation.Error("Require Title. ");
- // }
- // if (string.IsNullOrEmpty(Version))
- // {
- // yield return Validation.Error("Require Version. ");
- // }
- // if (string.IsNullOrEmpty(Author))
- // {
- // yield return Validation.Error("Require Author. ");
- // }
-
if (ReduceBlendshape && Source.GetComponent() == null)
{
yield return Validation.Error("ReduceBlendshapeSize needs VRMBlendShapeProxy. You need to convert to VRM once.");
diff --git a/Assets/VRM/UniVRM/Editor/Format/VRMExporterWizard.cs b/Assets/VRM/UniVRM/Editor/Format/VRMExporterWizard.cs
index 0b52436d2..0cc1013bf 100644
--- a/Assets/VRM/UniVRM/Editor/Format/VRMExporterWizard.cs
+++ b/Assets/VRM/UniVRM/Editor/Format/VRMExporterWizard.cs
@@ -1,8 +1,8 @@
using System;
+using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
-using System.Text;
using UnityEditor;
using UnityEngine;
using uei = UnityEngine.Internal;
@@ -29,19 +29,34 @@ namespace VRM
UnityEditor.Editor.DestroyImmediate(m_metaEditor);
}
m_meta = value;
- if (m_meta != null)
+ if (m_meta == null)
{
- m_metaEditor = Editor.CreateEditor(m_meta);
+ m_meta = TmpMeta;
}
+ // m_metaEditor = Editor.CreateEditor(m_meta);
+ }
+ }
+
+ VRMMetaObject m_tmpMeta;
+ VRMMetaObject TmpMeta
+ {
+ get
+ {
+ if (m_tmpMeta == null)
+ {
+ m_tmpMeta = ScriptableObject.CreateInstance();
+ }
+ return m_tmpMeta;
}
}
Editor m_metaEditor;
Editor m_Inspector;
- private string m_HelpString = "";
- private string m_ErrorString = "";
private bool m_IsValid = true;
+
+ List m_validations = new List();
+
private Vector2 m_ScrollPosition;
private string m_CreateButton = "Create";
private string m_OtherButton = "";
@@ -50,6 +65,7 @@ namespace VRM
{
UnityEditor.Editor.DestroyImmediate(m_Inspector);
Meta = null;
+ ScriptableObject.DestroyImmediate(m_tmpMeta);
}
private void InvokeWizardUpdate()
@@ -87,7 +103,6 @@ namespace VRM
private void OnGUI()
{
EditorGUIUtility.labelWidth = 150;
- GUILayout.Label(m_HelpString, EditorStyles.wordWrappedLabel, GUILayout.ExpandHeight(true));
// Render contents using Generic Inspector GUI
m_ScrollPosition = BeginVerticalScrollView(m_ScrollPosition, false, GUI.skin.verticalScrollbar, "OL Box");
@@ -96,44 +111,49 @@ namespace VRM
EditorGUILayout.EndScrollView();
// Create and Other Buttons
- GUILayout.BeginVertical();
- if (m_ErrorString != string.Empty)
- GUILayout.Label(m_ErrorString, Styles.errorText, GUILayout.MinHeight(32));
- else
- GUILayout.Label(string.Empty, GUILayout.MinHeight(32));
- GUILayout.FlexibleSpace();
-
- GUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- GUI.enabled = m_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)
+ // errors
+ GUILayout.BeginVertical();
+ // foreach (var v in m_validations)
+ // {
+ // v.DrawGUI();
+ // }
+ GUILayout.FlexibleSpace();
+
{
- method.Invoke(this, null);
- GUIUtility.ExitGUI();
+ GUILayout.BeginHorizontal();
+ GUILayout.FlexibleSpace();
+ GUI.enabled = m_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();
}
- else
- Debug.LogError("OnWizardOtherButton has not been implemented in script");
+ GUILayout.EndVertical();
}
-
- 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();
if (modified)
InvokeWizardUpdate();
@@ -142,8 +162,12 @@ namespace VRM
protected virtual bool DrawWizardGUI()
{
- if (m_metaEditor != null)
+ if (Meta != null)
{
+ if (m_metaEditor == null)
+ {
+ m_metaEditor = Editor.CreateEditor(Meta);
+ }
m_metaEditor.OnInspectorGUI();
}
{
@@ -212,36 +236,6 @@ namespace VRM
// // This is called when the user clicks on the Create button.
// void OnWizardCreate();
- // Allows you to set the help text of the wizard.
- public string helpString
- {
- get { return m_HelpString; }
- set
- {
- var newString = value ?? string.Empty;
- if (m_HelpString != newString)
- {
- m_HelpString = newString;
- Repaint();
- }
- }
- }
-
- // Allows you to set the error text of the wizard.
- public string errorString
- {
- get { return m_ErrorString; }
- set
- {
- var newString = value ?? string.Empty;
- if (m_ErrorString != newString)
- {
- m_ErrorString = newString;
- Repaint();
- }
- }
- }
-
// Allows you to set the create button text of the wizard.
public string createButtonName
{
@@ -299,11 +293,13 @@ namespace VRM
{
// Debug.Log("OnEnable");
Undo.willFlushUndoRecord += OnWizardUpdate;
+ Selection.selectionChanged += OnWizardUpdate;
}
void OnDisable()
{
// Debug.Log("OnDisable");
+ Selection.selectionChanged -= OnWizardUpdate;
Undo.willFlushUndoRecord -= OnWizardUpdate;
}
@@ -333,25 +329,19 @@ namespace VRM
void OnWizardUpdate()
{
- isValid = true;
- var helpBuilder = new StringBuilder();
- var errorBuilder = new StringBuilder();
-
- foreach (var validation in m_settings.Validate())
+ m_validations.Clear();
+ m_validations.AddRange(m_settings.Validate());
+ if (Meta != null)
{
- if (!validation.CanExport)
- {
- isValid = false;
- errorBuilder.Append(validation.Message);
- }
- else
- {
- helpBuilder.AppendLine(validation.Message);
- }
+ m_validations.AddRange(Meta.Validate());
+ }
+ else
+ {
+ m_validations.Add(Validation.Error("meta がありません"));
}
- helpString = helpBuilder.ToString();
- errorString = errorBuilder.ToString();
+ var hasError = m_validations.Any(x => !x.CanExport);
+ m_IsValid = !hasError;
if (m_settings.Source == null)
{
@@ -364,9 +354,14 @@ namespace VRM
{
Meta = meta.Meta;
}
+ else
+ {
+ Meta = null;
+ }
}
Repaint();
+ // GUIUtility.ExitGUI();
}
}
}
diff --git a/Assets/VRM/UniVRM/Editor/Meta/VRMMetaObjectEditor.cs b/Assets/VRM/UniVRM/Editor/Meta/VRMMetaObjectEditor.cs
index 27af08d49..3768e9459 100644
--- a/Assets/VRM/UniVRM/Editor/Meta/VRMMetaObjectEditor.cs
+++ b/Assets/VRM/UniVRM/Editor/Meta/VRMMetaObjectEditor.cs
@@ -8,7 +8,7 @@ namespace VRM
[CustomEditor(typeof(VRMMetaObject))]
public class VRMMetaObjectEditor : Editor
{
- SerializedProperty m_ScriptProp;
+ // SerializedProperty m_ScriptProp;
class CustomProperty
{
@@ -42,6 +42,10 @@ namespace VRM
{
m_propMap.Clear();
m_customPropMap.Clear();
+ if (so == null)
+ {
+ return;
+ }
for (var it = so.GetIterator(); it.NextVisible(true);)
{
@@ -82,16 +86,19 @@ namespace VRM
private void OnEnable()
{
- m_ScriptProp = serializedObject.FindProperty("m_Script");
- InitMap(serializedObject);
+ // m_ScriptProp = serializedObject.FindProperty("m_Script");
+ if (serializedObject != null)
+ {
+ InitMap(serializedObject);
+ }
}
public override void OnInspectorGUI()
{
serializedObject.Update();
- GUI.enabled = false;
- EditorGUILayout.PropertyField(m_ScriptProp, true);
- GUI.enabled = true;
+ // GUI.enabled = false;
+ // EditorGUILayout.PropertyField(m_ScriptProp, true);
+ // GUI.enabled = true;
EditorGUILayout.Space();
VRMMetaObjectGUI(serializedObject);
diff --git a/Assets/VRM/UniVRM/Scripts/Meta/VRMMetaObject.cs b/Assets/VRM/UniVRM/Scripts/Meta/VRMMetaObject.cs
index cff8d80a9..bf352264c 100644
--- a/Assets/VRM/UniVRM/Scripts/Meta/VRMMetaObject.cs
+++ b/Assets/VRM/UniVRM/Scripts/Meta/VRMMetaObject.cs
@@ -1,4 +1,5 @@
-using UnityEngine;
+using System.Collections.Generic;
+using UnityEngine;
namespace VRM
@@ -63,5 +64,21 @@ namespace VRM
;
}
*/
+
+ public IEnumerable Validate()
+ {
+ if (string.IsNullOrEmpty(Title))
+ {
+ yield return Validation.Error("Require Title. ");
+ }
+ if (string.IsNullOrEmpty(Version))
+ {
+ yield return Validation.Error("Require Version. ");
+ }
+ if (string.IsNullOrEmpty(Author))
+ {
+ yield return Validation.Error("Require Author. ");
+ }
+ }
}
}
diff --git a/Assets/VRM/UniVRM/Scripts/Validation.cs b/Assets/VRM/UniVRM/Scripts/Validation.cs
new file mode 100644
index 000000000..df2d03a88
--- /dev/null
+++ b/Assets/VRM/UniVRM/Scripts/Validation.cs
@@ -0,0 +1,55 @@
+using System;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+
+namespace VRM
+{
+ public struct Validation
+ {
+ ///
+ /// エクスポート可能か否か。
+ /// true のメッセージは警告
+ /// false のメッセージはエラー
+ ///
+ public readonly bool CanExport;
+ public readonly String Message;
+
+ Validation(bool canExport, string message)
+ {
+ CanExport = canExport;
+ Message = message;
+ }
+
+#if UNITY_EDITOR
+ public void DrawGUI()
+ {
+ if (string.IsNullOrEmpty(Message))
+ {
+ return;
+ }
+
+ if (CanExport)
+ {
+ // warning
+ EditorGUILayout.HelpBox(Message, MessageType.Warning);
+ }
+ else
+ {
+ // error
+ EditorGUILayout.HelpBox(Message, MessageType.Error);
+ }
+ }
+#endif
+
+ public static Validation Error(string msg)
+ {
+ return new Validation(false, msg);
+ }
+
+ public static Validation Warning(string msg)
+ {
+ return new Validation(true, msg);
+ }
+ }
+}
\ No newline at end of file