diff --git a/Scripts/Format/Editor/VRMExporterMenu.cs b/Scripts/Format/Editor/VRMExporterMenu.cs index a21ec2000..6a8f4c4dd 100644 --- a/Scripts/Format/Editor/VRMExporterMenu.cs +++ b/Scripts/Format/Editor/VRMExporterMenu.cs @@ -6,13 +6,14 @@ using UniGLTF; using System.IO; using System.Text; + namespace VRM { public class VRMExporterWizard : ScriptableWizard { const string EXTENSION = ".vrm"; - public GameObject Target; + public Animator Target; VRMMeta m_meta; public string Title; @@ -27,7 +28,11 @@ namespace VRM { var wiz = ScriptableWizard.DisplayWizard( "VRM Exporter", "Export"); - wiz.Target = Selection.activeObject as GameObject; + var go= Selection.activeObject as GameObject; + if (go != null) + { + wiz.Target = go.GetComponent(); + } // update checkbox var desc = wiz.Target.GetComponent(); @@ -84,13 +89,13 @@ namespace VRM Dir = Path.GetDirectoryName(path); // export - var target = Target; + var target = Target.gameObject; if (PoseFreeze) { Undo.RecordObjects(Target.transform.Traverse().ToArray(), "before normalize"); var map = new Dictionary(); - target = VRM.BoneNormalizer.Execute(Target, map, ForceTPose); - VRMHumanoidNorimalizerMenu.CopyVRMComponents(Target, target, map); + target = VRM.BoneNormalizer.Execute(Target.gameObject, map, ForceTPose); + VRMHumanoidNorimalizerMenu.CopyVRMComponents(Target.gameObject, target, map); Undo.PerformUndo(); } @@ -118,18 +123,38 @@ namespace VRM var helpBuilder = new StringBuilder(); var errorBuilder = new StringBuilder(); - helpBuilder.Append("select humanoid root(require Animator with valid humanoid avatar).\n"); + if (Target == null) + { + isValid = false; + errorBuilder.Append("Require animator. "); + } + else if (Target.avatar == null) + { + isValid = false; + errorBuilder.Append("Require animator.avatar. "); + } + else if (!Target.avatar.isValid) + { + isValid = false; + errorBuilder.Append("Animator.avatar is not valid. "); + } + else if (!Target.avatar.isHuman) + { + isValid = false; + errorBuilder.Append("Animator.avatar is not humanoid. Please change model's AnimationType to humanoid. "); + } + if (string.IsNullOrEmpty(Title)) { isValid = false; - errorBuilder.Append("require Title\n"); + errorBuilder.Append("Require Title. "); } if (string.IsNullOrEmpty(Author)) { isValid = false; - errorBuilder.Append("require Author\n"); + errorBuilder.Append("Require Author. "); } helpString = helpBuilder.ToString(); @@ -156,22 +181,6 @@ namespace VRM return false; } - var avatar = animator.avatar; - if (avatar == null) - { - return false; - } - - if (!avatar.isValid) - { - return false; - } - - if (!avatar.isHuman) - { - return false; - } - return true; }