diff --git a/Packages/enitimeago.non-destructive-mmd/Editor/BlendShapeMappingsEditor.cs b/Packages/enitimeago.non-destructive-mmd/Editor/BlendShapeMappingsEditor.cs index d43f526..7d0f14c 100644 --- a/Packages/enitimeago.non-destructive-mmd/Editor/BlendShapeMappingsEditor.cs +++ b/Packages/enitimeago.non-destructive-mmd/Editor/BlendShapeMappingsEditor.cs @@ -136,7 +136,8 @@ public override void OnInspectorGUI() if (GUILayout.Button(L.Tr("MappingsEditor:ShareMenuLabel"))) { var menu = new GenericMenu(); - menu.AddItem(new GUIContent(L.Tr("MappingsEditor:ShareAsUnitypackage")), false, () => ExportPackage(data)); + menu.AddItem(new GUIContent(L.Tr("MappingsEditor:ShareAsUnitypackage")), false, () => ExportAsPackage(data)); + menu.AddItem(new GUIContent(L.Tr("MappingsEditor:ExportAsJson")), false, () => ExportAsJson(data, SafeFilename(avatar.name))); menu.ShowAsContext(); } GUI.enabled = true; @@ -161,14 +162,39 @@ public override void OnInspectorGUI() } } - private void ExportPackage(BlendShapeMappings mappingsComponent) + private string SafeFilename(string name) + { + foreach (char c in Path.GetInvalidFileNameChars()) + { + name = name.Replace(c, '_'); + } + return name; + } + + private void ExportAsJson(BlendShapeMappings mappingsComponent, string defaultName) + { + string jsonPath = EditorUtility.SaveFilePanel( + L.Tr("SaveFilePanel:SaveJson"), + "", + defaultName, + "json"); + if (string.IsNullOrEmpty(jsonPath)) + { + return; + } + + string json = JsonUtility.ToJson(mappingsComponent, prettyPrint: true); + + File.WriteAllText(jsonPath, json); + } + + private void ExportAsPackage(BlendShapeMappings mappingsComponent) { string packagePath = EditorUtility.SaveFilePanel( L.Tr("SaveFilePanel:SaveUnitypackage"), "", "", "unitypackage"); - if (string.IsNullOrEmpty(packagePath)) { return; diff --git a/Packages/enitimeago.non-destructive-mmd/Editor/Localization/en-us.po b/Packages/enitimeago.non-destructive-mmd/Editor/Localization/en-us.po index 718e177..d7881eb 100644 --- a/Packages/enitimeago.non-destructive-mmd/Editor/Localization/en-us.po +++ b/Packages/enitimeago.non-destructive-mmd/Editor/Localization/en-us.po @@ -68,6 +68,9 @@ msgstr "More..." msgid "MappingsEditor:ShareAsUnitypackage" msgstr "Share as .unitypackage..." +msgid "MappingsEditor:ExportAsJson" +msgstr "Export as .json..." + msgid "MappingsEditor:ShowStoredData" msgstr "Show stored data" @@ -152,6 +155,9 @@ msgstr "OK" msgid "SaveFilePanel:SaveUnitypackage" msgstr "Save .unitypackage" +msgid "SaveFilePanel:SaveJson" +msgstr "Save .json" + msgid "WriteDefaultsComponentEditor:ForceAvatarWriteDefaultsOn" msgstr "Force all FX Write Defaults ON" diff --git a/Packages/enitimeago.non-destructive-mmd/Editor/Localization/ja-jp.po b/Packages/enitimeago.non-destructive-mmd/Editor/Localization/ja-jp.po index 4ec0927..66bf7d6 100644 --- a/Packages/enitimeago.non-destructive-mmd/Editor/Localization/ja-jp.po +++ b/Packages/enitimeago.non-destructive-mmd/Editor/Localization/ja-jp.po @@ -68,6 +68,9 @@ msgstr "その他..." msgid "MappingsEditor:ShareAsUnitypackage" msgstr ".unitypackageで共有する..." +msgid "MappingsEditor:ExportAsJson" +msgstr ".jsonでエクスポートする..." + msgid "MappingsEditor:ShowStoredData" msgstr "保存データを表示"