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