From cfd246fce26b5df8f7d8647bccf7123d464d6cdf Mon Sep 17 00:00:00 2001 From: notargs Date: Fri, 15 Oct 2021 16:53:38 +0900 Subject: [PATCH] =?UTF-8?q?SpringBone=E3=81=AE=E5=86=85=E9=83=A8=E6=A7=8B?= =?UTF-8?q?=E9=80=A0=E3=82=92=E5=8B=95=E7=9A=84=E3=81=AB=E5=A4=89=E6=9B=B4?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AE=E4=BB=95=E7=B5=84?= =?UTF-8?q?=E3=81=BF=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Vrm10Instance/Vrm10Instance.cs | 21 +++++++++---------- .../Vrm10Instance/Vrm10InstanceRuntime.cs | 17 ++++++++++++++- 2 files changed, 26 insertions(+), 12 deletions(-) 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(