From 06814c1a75fc8e3069fb9d4ac3794b6c03e6b07f Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 28 Jun 2022 17:02:18 +0900 Subject: [PATCH] =?UTF-8?q?=E5=A4=89=E6=9B=B4=E3=82=92=E7=A0=B4=E6=A3=84?= =?UTF-8?q?=E3=80=82=E6=94=B9=E3=82=81=E3=81=A6=20Restart=20=E3=83=A1?= =?UTF-8?q?=E3=82=BD=E3=83=83=E3=83=89=E3=82=92=E4=BD=9C=E6=88=90=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(); } } }