diff --git a/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs b/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs new file mode 100644 index 000000000..a22cfd77e --- /dev/null +++ b/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs @@ -0,0 +1,23 @@ +using UnityEditor; +using UnityEngine; + +namespace UniGLTF.MeshUtility +{ + [CustomEditor(typeof(MeshProcessDialog), true)] + public class BoneMeshEraserGUI : Editor + { + public override void OnInspectorGUI() + { + serializedObject.Update(); + var skinnedMesh = serializedObject.FindProperty("_cSkinnedMesh"); + EditorGUILayout.PropertyField(skinnedMesh, new GUIContent("Skinned Mesh"), true); + var animator = serializedObject.FindProperty("_cAnimator"); + EditorGUILayout.PropertyField(animator, new GUIContent("Animator"), false); + var eraseRoot = serializedObject.FindProperty("_cEraseRoot"); + EditorGUILayout.PropertyField(eraseRoot, new GUIContent("Erase Root"), false); + var list = serializedObject.FindProperty("_eraseBones"); + EditorGUILayout.PropertyField(list, new GUIContent("Erase Bones"), true); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs.meta b/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs.meta new file mode 100644 index 000000000..eddf8f87d --- /dev/null +++ b/Assets/UniGLTF/Editor/MeshUtility/BoneMeshEraserGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cdbec3de528c61448aeb739ffe1f79e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Editor/MeshUtility/MeshProcessDialog.cs b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessDialog.cs index c42b5a8cd..eda9391d6 100644 --- a/Assets/UniGLTF/Editor/MeshUtility/MeshProcessDialog.cs +++ b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessDialog.cs @@ -9,24 +9,6 @@ using UniGLTF.M17N; namespace UniGLTF.MeshUtility { - [CustomEditor(typeof(MeshProcessDialog), true)] - public class BoneMeshEraserGUI : Editor - { - public override void OnInspectorGUI() - { - serializedObject.Update(); - var skinnedMesh = serializedObject.FindProperty("_cSkinnedMesh"); - EditorGUILayout.PropertyField(skinnedMesh, new GUIContent("Skinned Mesh"), true); - var animator = serializedObject.FindProperty("_cAnimator"); - EditorGUILayout.PropertyField(animator, new GUIContent("Animator"), false); - var eraseRoot = serializedObject.FindProperty("_cEraseRoot"); - EditorGUILayout.PropertyField(eraseRoot, new GUIContent("Erase Root"), false); - var list = serializedObject.FindProperty("_eraseBones"); - EditorGUILayout.PropertyField(list, new GUIContent("Erase Bones"), true); - serializedObject.ApplyModifiedProperties(); - } - } - public class MeshProcessDialog : EditorWindow { enum Tabs @@ -60,55 +42,14 @@ namespace UniGLTF.MeshUtility GUIStyle _tabButtonStyle => "LargeButton"; GUI.ToolbarButtonSize _tabButtonSize => GUI.ToolbarButtonSize.Fixed; - private enum MeshProcessingMessages + + public static void OpenWindow() { - [LangMsg(Languages.ja, "ターゲットオブジェクト")] - [LangMsg(Languages.en, "TargetObject")] - TARGET_OBJECT, - - [LangMsg(Languages.ja, "BlendShapeを含むメッシュは分割されます")] - [LangMsg(Languages.en, "Meshes containing BlendShape will be split")] - MESH_SEPARATOR, - - [LangMsg(Languages.ja, "メッシュを統合します。BlendShapeを含むメッシュは独立して統合されます")] - [LangMsg(Languages.en, "Generate a single mesh. Meshes w/ BlendShape will be grouped into another one")] - MESH_INTEGRATOR, - - [LangMsg(Languages.ja, "静的メッシュを一つに統合します")] - [LangMsg(Languages.en, "Integrate static meshes into one")] - STATIC_MESH_INTEGRATOR, - - [LangMsg(Languages.ja, "ボーン(Erase Rootのヒエラルキー)に関連するメッシュを削除します")] - [LangMsg(Languages.en, "Eliminate meshes associated with the bones in EraseRoot hierarchy")] - BONE_MESH_ERASER, - - [LangMsg(Languages.ja, "Skinned Meshを選んでください")] - [LangMsg(Languages.en, "Select a skinned mesh")] - SELECT_SKINNED_MESH, - - [LangMsg(Languages.ja, "Erase Rootを選んでください")] - [LangMsg(Languages.en, "Select a erase root")] - SELECT_ERASE_ROOT, - - [LangMsg(Languages.ja, "GameObjectを選んでください")] - [LangMsg(Languages.en, "Select a GameObject first")] - NO_GAMEOBJECT_SELECTED, - - [LangMsg(Languages.ja, "GameObjectにスキンメッシュが含まれていません")] - [LangMsg(Languages.en, "No skinned mesh is contained")] - NO_SKINNED_MESH, - - [LangMsg(Languages.ja, "GameObjectに静的メッシュが含まれていません")] - [LangMsg(Languages.en, "No static mesh is contained")] - NO_STATIC_MESH, - - [LangMsg(Languages.ja, "GameObjectにスキンメッシュ・静的メッシュが含まれていません")] - [LangMsg(Languages.en, "Skinned/Static mesh is not contained")] - NO_MESH, - - [LangMsg(Languages.ja, "ターゲットオブジェクトはVRMモデルです。`VRM0-> MeshIntegrator`を使ってください")] - [LangMsg(Languages.en, "Target object is VRM model, use `VRM0 -> MeshIntegrator` instead")] - VRM_DETECTED, + var window = + (MeshProcessDialog)EditorWindow.GetWindowWithRect(typeof(MeshProcessDialog), + new Rect(0, 0, 650, 500)); + window.titleContent = new GUIContent("Mesh Processing Window"); + window.Show(); } private void OnEnable() diff --git a/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs new file mode 100644 index 000000000..3e406a8cc --- /dev/null +++ b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs @@ -0,0 +1,55 @@ +using UniGLTF.M17N; + +namespace UniGLTF.MeshUtility +{ + public enum MeshProcessingMessages + { + [LangMsg(Languages.ja, "ターゲットオブジェクト")] + [LangMsg(Languages.en, "TargetObject")] + TARGET_OBJECT, + + [LangMsg(Languages.ja, "BlendShapeを含むメッシュは分割されます")] + [LangMsg(Languages.en, "Meshes containing BlendShape will be split")] + MESH_SEPARATOR, + + [LangMsg(Languages.ja, "メッシュを統合します。BlendShapeを含むメッシュは独立して統合されます")] + [LangMsg(Languages.en, "Generate a single mesh. Meshes w/ BlendShape will be grouped into another one")] + MESH_INTEGRATOR, + + [LangMsg(Languages.ja, "静的メッシュを一つに統合します")] + [LangMsg(Languages.en, "Integrate static meshes into one")] + STATIC_MESH_INTEGRATOR, + + [LangMsg(Languages.ja, "ボーン(Erase Rootのヒエラルキー)に関連するメッシュを削除します")] + [LangMsg(Languages.en, "Eliminate meshes associated with the bones in EraseRoot hierarchy")] + BONE_MESH_ERASER, + + [LangMsg(Languages.ja, "Skinned Meshを選んでください")] + [LangMsg(Languages.en, "Select a skinned mesh")] + SELECT_SKINNED_MESH, + + [LangMsg(Languages.ja, "Erase Rootを選んでください")] + [LangMsg(Languages.en, "Select a erase root")] + SELECT_ERASE_ROOT, + + [LangMsg(Languages.ja, "GameObjectを選んでください")] + [LangMsg(Languages.en, "Select a GameObject first")] + NO_GAMEOBJECT_SELECTED, + + [LangMsg(Languages.ja, "GameObjectにスキンメッシュが含まれていません")] + [LangMsg(Languages.en, "No skinned mesh is contained")] + NO_SKINNED_MESH, + + [LangMsg(Languages.ja, "GameObjectに静的メッシュが含まれていません")] + [LangMsg(Languages.en, "No static mesh is contained")] + NO_STATIC_MESH, + + [LangMsg(Languages.ja, "GameObjectにスキンメッシュ・静的メッシュが含まれていません")] + [LangMsg(Languages.en, "Skinned/Static mesh is not contained")] + NO_MESH, + + [LangMsg(Languages.ja, "ターゲットオブジェクトはVRMモデルです。`VRM0-> MeshIntegrator`を使ってください")] + [LangMsg(Languages.en, "Target object is VRM model, use `VRM0 -> MeshIntegrator` instead")] + VRM_DETECTED, + } +} \ No newline at end of file diff --git a/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs.meta b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs.meta new file mode 100644 index 000000000..e3b56a221 --- /dev/null +++ b/Assets/UniGLTF/Editor/MeshUtility/MeshProcessingMessages.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 575d573f28f0e4a48a2a6509e69b7f6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UniGLTF/Editor/TopMenu.cs b/Assets/UniGLTF/Editor/TopMenu.cs index 2a7083cf5..f41b442e6 100644 --- a/Assets/UniGLTF/Editor/TopMenu.cs +++ b/Assets/UniGLTF/Editor/TopMenu.cs @@ -26,10 +26,7 @@ namespace UniGLTF private static void ImportGltfFile() => TopMenuImplementation.ImportGltfFileToGameObject(); [MenuItem(UserMeshUtilityPrefix + "/MeshProcessing Wizard", priority = 10)] - private static void OpenMeshProcessingWindow() => TopMenuImplementation.OpenMeshProcessingWindow(); - - [MenuItem(UserMeshUtilityPrefix + "/Open Documents", priority = 11)] - private static void MeshUtilityDocs() => Application.OpenURL("https://vrm.dev/en/docs/univrm/gltf/mesh_utility/"); + private static void OpenMeshProcessingWindow() => MeshUtility.MeshProcessDialog.OpenWindow(); #if VRM_DEVELOP [MenuItem(DevelopmentMenuPrefix + "/Generate Serialization Code", priority = 20)] diff --git a/Assets/UniGLTF/Editor/TopMenuImplementation.cs b/Assets/UniGLTF/Editor/TopMenuImplementation.cs index a9ec44f1f..6a5cf2ad6 100644 --- a/Assets/UniGLTF/Editor/TopMenuImplementation.cs +++ b/Assets/UniGLTF/Editor/TopMenuImplementation.cs @@ -8,7 +8,7 @@ namespace UniGLTF { public static void ExportGameObjectToGltfFile() { - var window = (GltfExportWindow) GltfExportWindow.GetWindow(typeof(GltfExportWindow)); + var window = (GltfExportWindow)GltfExportWindow.GetWindow(typeof(GltfExportWindow)); window.titleContent = new GUIContent("Gltf Exporter"); window.Show(); } @@ -92,19 +92,10 @@ namespace UniGLTF Selection.activeObject = asset; } - public static void OpenMeshProcessingWindow() - { - var window = - (MeshUtility.MeshProcessDialog) EditorWindow.GetWindowWithRect(typeof(MeshUtility.MeshProcessDialog), - new Rect(0, 0, 650, 500)); - window.titleContent = new GUIContent("Mesh Processing Window"); - window.Show(); - } - public static void GenerateSerializationCode() { SerializerGenerator.GenerateSerializer(); DeserializerGenerator.GenerateSerializer(); } } -} \ No newline at end of file +}