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(); } } }