From c2888f25215c10b040474d00946334c5abc3a714 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 28 Jun 2022 14:29:36 +0900 Subject: [PATCH] =?UTF-8?q?runtime=20=E3=81=AB=20BlendShapeProxy.m=5Fmerge?= =?UTF-8?q?r=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(); } } }