diff --git a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs
index cc2355991..2be908386 100644
--- a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs
+++ b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs
@@ -57,17 +57,16 @@ namespace UniVRM10
Vrm10InstanceRuntime m_runtime;
- ///
- /// delay new Vrm10InstanceRuntime
- ///
- ///
- Vrm10InstanceRuntime GetOrCreate()
+ public Vrm10InstanceRuntime Runtime
{
- if (m_runtime == null)
+ get
{
- m_runtime = new Vrm10InstanceRuntime(this);
+ if (m_runtime == null)
+ {
+ m_runtime = new Vrm10InstanceRuntime(this);
+ }
+ return m_runtime;
}
- return m_runtime;
}
void Start()
@@ -85,7 +84,7 @@ namespace UniVRM10
{
if (UpdateType == UpdateTypes.Update)
{
- GetOrCreate().Process();
+ Runtime.Process();
}
}
@@ -93,13 +92,13 @@ namespace UniVRM10
{
if (UpdateType == UpdateTypes.LateUpdate)
{
- GetOrCreate().Process();
+ Runtime.Process();
}
}
private void OnDestroy()
{
- GetOrCreate().Dispose();
+ Runtime.Dispose();
}
}
}
diff --git a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceRuntime.cs b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceRuntime.cs
index a7591ebf0..7fad226ad 100644
--- a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceRuntime.cs
+++ b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceRuntime.cs
@@ -15,7 +15,8 @@ namespace UniVRM10
private readonly VRM10Constraint[] m_constraints;
private readonly Transform m_head;
private readonly FastSpringBoneService m_fastSpringBoneService;
- private readonly FastSpringBoneBuffer m_fastSpringBoneBuffer;
+
+ private FastSpringBoneBuffer m_fastSpringBoneBuffer;
public Vrm10InstanceRuntime(Vrm10Instance target)
{
@@ -46,6 +47,20 @@ namespace UniVRM10
m_fastSpringBoneService.BufferCombiner.Register(m_fastSpringBoneBuffer);
}
+ ///
+ /// このVRMに紐づくSpringBone関連のバッファを再構築する
+ /// ランタイム実行時にSpringBoneに対して変更を行いたいときは、このメソッドを明示的に呼ぶ必要がある
+ ///
+ public void ReconstructSpringBone()
+ {
+ m_fastSpringBoneService.BufferCombiner.Unregister(m_fastSpringBoneBuffer);
+
+ m_fastSpringBoneBuffer.Dispose();
+ m_fastSpringBoneBuffer = CreateFastSpringBoneBuffer(m_target.SpringBone);
+
+ m_fastSpringBoneService.BufferCombiner.Register(m_fastSpringBoneBuffer);
+ }
+
private FastSpringBoneBuffer CreateFastSpringBoneBuffer(Vrm10InstanceSpringBone springBone)
{
return new FastSpringBoneBuffer(