From c2888f25215c10b040474d00946334c5abc3a714 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 28 Jun 2022 14:29:36 +0900 Subject: [PATCH 1/3] =?UTF-8?q?runtime=20=E3=81=AB=20BlendShapeProxy.m=5Fm?= =?UTF-8?q?erger=20=E3=82=92=E5=86=8D=E5=88=9D=E6=9C=9F=E5=8C=96=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/BlendShape/VRMBlendShapeProxy.cs | 59 ++++++++++++------- 1 file changed, 37 insertions(+), 22 deletions(-) diff --git a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs index 1721c6dab..b92734b8b 100644 --- a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs +++ b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs @@ -18,22 +18,31 @@ namespace VRM BlendShapeMerger m_merger; - private void OnDestroy() + BlendShapeMerger Merger { - if (m_merger != null) - { - m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips); - } - } - - private void Start() - { - if (BlendShapeAvatar != null) + get { if (m_merger == null) { m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); } + return m_merger; + } + } + + /// + /// BlendShapeAvatar.Clips の変更を反映したいときに BlendShapeMerger を削除して状態をクリアします。 + /// + public void Clear() + { + m_merger = null; + } + + private void OnDestroy() + { + if (m_merger != null) + { + m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips); } } @@ -44,9 +53,10 @@ namespace VRM /// public void ImmediatelySetValue(BlendShapeKey key, float value) { - if (m_merger != null) + var merger = Merger; + if (merger != null) { - m_merger.ImmediatelySetValue(key, value); + merger.ImmediatelySetValue(key, value); } } @@ -57,9 +67,10 @@ namespace VRM /// public void AccumulateValue(BlendShapeKey key, float value) { - if (m_merger != null) + var merger = Merger; + if (merger != null) { - m_merger.AccumulateValue(key, value); + merger.AccumulateValue(key, value); } } @@ -70,21 +81,23 @@ namespace VRM /// public float GetValue(BlendShapeKey key) { - if (m_merger == null) + var merger = Merger; + if (merger == null) { return 0; } - return m_merger.GetValue(key); + return merger.GetValue(key); } public IEnumerable> GetValues() { - if (m_merger != null && BlendShapeAvatar != null) + var merger = Merger; + if (merger != null && BlendShapeAvatar != null) { foreach (var clip in BlendShapeAvatar.Clips) { var key = BlendShapeKey.CreateFromClip(clip); - yield return new KeyValuePair(key, m_merger.GetValue(key)); + yield return new KeyValuePair(key, merger.GetValue(key)); } } } @@ -95,9 +108,10 @@ namespace VRM /// public void SetValues(IEnumerable> values) { - if (m_merger != null) + var merger = Merger; + if (merger != null) { - m_merger.SetValues(values); + merger.SetValues(values); } } @@ -106,9 +120,10 @@ namespace VRM /// public void Apply() { - if (m_merger != null) + var merger = Merger; + if (merger != null) { - m_merger.Apply(); + merger.Apply(); } } } From 06814c1a75fc8e3069fb9d4ac3794b6c03e6b07f Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 28 Jun 2022 17:02:18 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=82=92=E7=A0=B4?= =?UTF-8?q?=E6=A3=84=E3=80=82=E6=94=B9=E3=82=81=E3=81=A6=20Restart=20?= =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runtime/BlendShape/VRMBlendShapeProxy.cs | 63 ++++++++++--------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs index b92734b8b..b594b6935 100644 --- a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs +++ b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs @@ -17,32 +17,39 @@ namespace VRM } BlendShapeMerger m_merger; - - BlendShapeMerger Merger + bool m_destroyed = false; + private void OnDestroy() { - get + m_destroyed = true; + if (m_merger != null) + { + m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips); + } + } + + private void Start() + { + if (BlendShapeAvatar != null) { if (m_merger == null) { m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); } - return m_merger; } } /// - /// BlendShapeAvatar.Clips の変更を反映したいときに BlendShapeMerger を削除して状態をクリアします。 + /// m_merger を(再)作成する。 + /// BlendShapeAvatar.Clips に対する変更を反映できます。 /// - public void Clear() + public void Restart() { - m_merger = null; - } - - private void OnDestroy() - { - if (m_merger != null) + if (BlendShapeAvatar != null) { - m_merger.RestoreMaterialInitialValues(BlendShapeAvatar.Clips); + if (!m_destroyed) + { + m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); + } } } @@ -53,10 +60,9 @@ namespace VRM /// public void ImmediatelySetValue(BlendShapeKey key, float value) { - var merger = Merger; - if (merger != null) + if (m_merger != null) { - merger.ImmediatelySetValue(key, value); + m_merger.ImmediatelySetValue(key, value); } } @@ -67,10 +73,9 @@ namespace VRM /// public void AccumulateValue(BlendShapeKey key, float value) { - var merger = Merger; - if (merger != null) + if (m_merger != null) { - merger.AccumulateValue(key, value); + m_merger.AccumulateValue(key, value); } } @@ -81,23 +86,21 @@ namespace VRM /// public float GetValue(BlendShapeKey key) { - var merger = Merger; - if (merger == null) + if (m_merger == null) { return 0; } - return merger.GetValue(key); + return m_merger.GetValue(key); } public IEnumerable> GetValues() { - var merger = Merger; - if (merger != null && BlendShapeAvatar != null) + if (m_merger != null && BlendShapeAvatar != null) { foreach (var clip in BlendShapeAvatar.Clips) { var key = BlendShapeKey.CreateFromClip(clip); - yield return new KeyValuePair(key, merger.GetValue(key)); + yield return new KeyValuePair(key, m_merger.GetValue(key)); } } } @@ -108,10 +111,9 @@ namespace VRM /// public void SetValues(IEnumerable> values) { - var merger = Merger; - if (merger != null) + if (m_merger != null) { - merger.SetValues(values); + m_merger.SetValues(values); } } @@ -120,10 +122,9 @@ namespace VRM /// public void Apply() { - var merger = Merger; - if (merger != null) + if (m_merger != null) { - merger.Apply(); + m_merger.Apply(); } } } From 2f51b742745f2f479830eb68f3f187043630d1af Mon Sep 17 00:00:00 2001 From: ousttrue Date: Wed, 29 Jun 2022 13:07:58 +0900 Subject: [PATCH 3/3] Reinitialize --- .../Runtime/BlendShape/VRMBlendShapeProxy.cs | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs index b594b6935..ff74af168 100644 --- a/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs +++ b/Assets/VRM/Runtime/BlendShape/VRMBlendShapeProxy.cs @@ -29,28 +29,25 @@ namespace VRM private void Start() { - if (BlendShapeAvatar != null) + if (m_destroyed) { - if (m_merger == null) - { - m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); - } + return; } + if (BlendShapeAvatar == null) + { + return; + } + // m_merger の null check は必用か? + m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); } /// /// m_merger を(再)作成する。 /// BlendShapeAvatar.Clips に対する変更を反映できます。 /// - public void Restart() + public void Reinitialize() { - if (BlendShapeAvatar != null) - { - if (!m_destroyed) - { - m_merger = new BlendShapeMerger(BlendShapeAvatar.Clips, transform); - } - } + Start(); } ///