diff --git a/Scripts/SpringBone/VRMSpringBone.cs b/Scripts/SpringBone/VRMSpringBone.cs index e8df9911a..6143b4f49 100644 --- a/Scripts/SpringBone/VRMSpringBone.cs +++ b/Scripts/SpringBone/VRMSpringBone.cs @@ -36,6 +36,7 @@ namespace VRM [SerializeField] public List RootBones = new List(); + Dictionary m_initialLocalRotationMap; [SerializeField, Range(0, 0.5f), Header("Collider")] public float m_hitRadius = 0.02f; @@ -191,14 +192,34 @@ namespace VRM Setup(); } + [ContextMenu("Reset bones")] public void Setup() { if (RootBones != null) { + if (m_initialLocalRotationMap == null) + { + m_initialLocalRotationMap = new Dictionary(); + } + else + { + foreach(var kv in m_initialLocalRotationMap) + { + kv.Key.localRotation = kv.Value; + } + m_initialLocalRotationMap.Clear(); + } + m_verlet.Clear(); + foreach (var go in RootBones) { if (go != null) { + foreach(var x in go.transform.Traverse()) + { + m_initialLocalRotationMap[x] = x.localRotation; + } + SetupRecursive(m_center, go); } }