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(