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