From cc7c60e61b5f1e1644af34c1092497b73cddff59 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 2 Jun 2020 21:07:00 +0900 Subject: [PATCH] CopyBlendShapeAvatar --- .../UniVRM/Editor/Format/VRMEditorExporter.cs | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Assets/VRM/UniVRM/Editor/Format/VRMEditorExporter.cs b/Assets/VRM/UniVRM/Editor/Format/VRMEditorExporter.cs index 0fd5b15a2..ce2a1675a 100644 --- a/Assets/VRM/UniVRM/Editor/Format/VRMEditorExporter.cs +++ b/Assets/VRM/UniVRM/Editor/Format/VRMEditorExporter.cs @@ -32,6 +32,21 @@ namespace VRM return !go.scene.IsValid(); } + /// + /// DeepCopy + /// + /// + /// + static BlendShapeAvatar CopyBlendShapeAvatar(BlendShapeAvatar src) + { + var avatar = GameObject.Instantiate(src); + avatar.Clips = new List(); + foreach (var clip in src.Clips) + { + avatar.Clips.Add(GameObject.Instantiate(clip)); + } + return avatar; + } static void Export(string path, VRMExportSettings settings, List destroy) { @@ -62,13 +77,7 @@ namespace VRM var proxy = target.GetComponent(); // 元のBlendShapeClipに変更を加えないように複製 - var copyBlendShapeAvatar = GameObject.Instantiate(proxy.BlendShapeAvatar); - var copyBlendShapClips = new List(); - - foreach (var clip in proxy.BlendShapeAvatar.Clips) - { - copyBlendShapClips.Add(GameObject.Instantiate(clip)); - } + var copyBlendShapeAvatar = CopyBlendShapeAvatar(proxy.BlendShapeAvatar); var skinnedMeshRenderers = target.GetComponentsInChildren(); @@ -91,7 +100,7 @@ namespace VRM ns.Clear(); ts.Clear(); - var usedBlendshapeIndexArray = copyBlendShapClips + var usedBlendshapeIndexArray = copyBlendShapeAvatar.Clips .SelectMany(clip => clip.Values) .Where(val => target.transform.Find(val.RelativePath) == smr.transform) .Select(val => val.Index) @@ -123,7 +132,7 @@ namespace VRM .Select((x, i) => new { x, i }) .ToDictionary(pair => pair.x, pair => pair.i); - foreach (var clip in copyBlendShapClips) + foreach (var clip in copyBlendShapeAvatar.Clips) { for (var i = 0; i < clip.Values.Length; ++i) { @@ -134,8 +143,6 @@ namespace VRM } } - copyBlendShapeAvatar.Clips = copyBlendShapClips; - proxy.BlendShapeAvatar = copyBlendShapeAvatar; smr.sharedMesh = copyMesh;