From 4cf1284576c604d303a514e2f1f98f6e80d851fc Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 19 May 2022 15:32:26 +0900 Subject: [PATCH 1/3] add AssginAllBlendShapesInAFolder --- .../BlendShapeMenu/AddBlankForPerfectSync.cs | 72 ++++++++++++++++--- 1 file changed, 62 insertions(+), 10 deletions(-) diff --git a/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs b/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs index c5eff8cb5..3b66875c3 100644 --- a/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs +++ b/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs @@ -1,4 +1,5 @@ -using System.Text; +using System.IO; +using System.Text; using UnityEditor; using UnityEngine; @@ -62,6 +63,21 @@ namespace VRM.Sample.BlendShapeMenu "TongueOut", }; + /// + /// fullpath C:/path/to/project/Assets/some.preset to Assets/some.preset + /// + /// + static string ToUnityPath(string src) + { + if (!src.StartsWith(Application.dataPath)) + { + // not in Assets + throw new System.Exception("not in Assets"); + } + + return "Assets" + src.Substring(Application.dataPath.Length); + } + [MenuItem("CONTEXT/BlendShapeAvatar/Add ARKit FaceTracking BlendShapes")] public static void AddARKitFaceTrackingBlendShapes(MenuCommand command) { @@ -82,14 +98,7 @@ namespace VRM.Sample.BlendShapeMenu return; } - if (!dir.StartsWith(Application.dataPath)) - { - // not in Assets - EditorUtility.DisplayDialog("error", "folder is not in Assets", "ok"); - return; - } - - var assetDir = "Assets" + dir.Substring(Application.dataPath.Length); + var assetDir = ToUnityPath(dir); var sb = new StringBuilder(); foreach (var name in NAMES) { @@ -114,7 +123,50 @@ namespace VRM.Sample.BlendShapeMenu avatar.Clips.Add(clip); } - Debug.Log(sb.ToString()); + Debug.Log("Create\n" + sb.ToString()); + } + + [MenuItem("CONTEXT/BlendShapeAvatar/Assign all BlendShapes in a folder")] + static void AssginAllBlendShapesInAFolder(MenuCommand command) + { + // Debug.Log(command.context); + var avatar = command.context as BlendShapeAvatar; + if (avatar == null) + { + Debug.LogError("no context"); + return; + } + + var assetPath = AssetDatabase.GetAssetPath(avatar); + + var dir = EditorUtility.SaveFolderPanel("blendshape folder", assetPath, ""); + if (string.IsNullOrEmpty(dir)) + { + // cancel + return; + } + + var assetDir = ToUnityPath(dir); + var sb = new StringBuilder(); + foreach (var f in Directory.EnumerateFiles(dir)) + { + var extension = Path.GetExtension(f).ToLower(); + if (extension != ".asset") + { + continue; + } + + var clipPath = ToUnityPath(f); + sb.AppendLine(clipPath); + var clip = AssetDatabase.LoadAssetAtPath(clipPath); + if (avatar.Clips.Contains(clip)) + { + continue; + } + avatar.Clips.Add(clip); + } + + Debug.Log($"Assign\n" + sb.ToString()); } } } From 5fd867a1e33f7eabb963bff548d85c61a7953aa0 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 19 May 2022 15:33:05 +0900 Subject: [PATCH 2/3] rename --- .../{AddBlankForPerfectSync.cs => BlendShapeMenu.cs} | 0 .../{AddBlankForPerfectSync.cs.meta => BlendShapeMenu.cs.meta} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Assets/VRM_Samples/BlendShapeMenu/{AddBlankForPerfectSync.cs => BlendShapeMenu.cs} (100%) rename Assets/VRM_Samples/BlendShapeMenu/{AddBlankForPerfectSync.cs.meta => BlendShapeMenu.cs.meta} (100%) diff --git a/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs b/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs similarity index 100% rename from Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs rename to Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs diff --git a/Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs.meta b/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs.meta similarity index 100% rename from Assets/VRM_Samples/BlendShapeMenu/AddBlankForPerfectSync.cs.meta rename to Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs.meta From d4609bc2c78f79cceffc9799ae0495c8224df8c8 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Thu, 19 May 2022 15:48:51 +0900 Subject: [PATCH 3/3] fix --- Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs b/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs index 3b66875c3..7cbdc8ee4 100644 --- a/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs +++ b/Assets/VRM_Samples/BlendShapeMenu/BlendShapeMenu.cs @@ -136,7 +136,6 @@ namespace VRM.Sample.BlendShapeMenu Debug.LogError("no context"); return; } - var assetPath = AssetDatabase.GetAssetPath(avatar); var dir = EditorUtility.SaveFolderPanel("blendshape folder", assetPath, ""); @@ -153,16 +152,25 @@ namespace VRM.Sample.BlendShapeMenu var extension = Path.GetExtension(f).ToLower(); if (extension != ".asset") { + // not asset continue; } var clipPath = ToUnityPath(f); - sb.AppendLine(clipPath); + if (clipPath == null) + { + // not BlendShapeClip + continue; + } + var clip = AssetDatabase.LoadAssetAtPath(clipPath); if (avatar.Clips.Contains(clip)) { + // already exists continue; } + + sb.AppendLine(clipPath); avatar.Clips.Add(clip); }