From 2effde9c1f87efe17847a6e21450976e9a9f571f Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 2 Jul 2024 18:30:04 +0900 Subject: [PATCH] show spring info on VRM10SpringBoneJointEditor --- .../SpringBone/VRM10SpringBoneJointEditor.cs | 38 +++++++++++++++++++ .../Vrm10Instance/Vrm10InstanceSpringBone.cs | 13 +++++++ 2 files changed, 51 insertions(+) diff --git a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs index 5f2e5329e..9990f5fdf 100644 --- a/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs +++ b/Assets/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs @@ -14,6 +14,8 @@ namespace UniVRM10 private SerializedProperty m_dragForceProp; private SerializedProperty m_jointRadiusProp; + private Vrm10Instance m_root; + void OnEnable() { if (target == null) @@ -27,12 +29,48 @@ namespace UniVRM10 m_gravityDirProp = serializedObject.FindProperty(nameof(VRM10SpringBoneJoint.m_gravityDir)); m_dragForceProp = serializedObject.FindProperty(nameof(VRM10SpringBoneJoint.m_dragForce)); m_jointRadiusProp = serializedObject.FindProperty(nameof(VRM10SpringBoneJoint.m_jointRadius)); + + if (m_target != null) + { + m_root = m_target.GetComponentInParent(); + } } public override void OnInspectorGUI() { serializedObject.Update(); + // spring status + EditorGUILayout.LabelField("Spring", EditorStyles.boldLabel); + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.ObjectField("Vrm-1.0", m_root, typeof(Vrm10Instance), true, null); + if (m_root != null) + { + var found = m_root.SpringBone.FindJoint(m_target); + if (found.HasValue) + { + var (spring, i) = found.Value; + // var j = spring.Joints.IndexOf(m_target); + EditorGUILayout.LabelField($"Springs[{i}]({spring.Name})"); + for (int j = 0; j < spring.Joints.Count; ++j) + { + var label = $"Joints[{j}]"; + if + (spring.Joints[j] == m_target) + { + label += "★"; + } + EditorGUILayout.ObjectField(label, spring.Joints[j], typeof(VRM10SpringBoneJoint), true, null); + } + } + else + { + EditorGUILayout.HelpBox("This joint not belongs any spring", MessageType.Warning); + } + } + EditorGUI.EndDisabledGroup(); + + // joint EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel); LimitBreakSlider(m_stiffnessForceProp, 0.0f, 4.0f, 0.0f, Mathf.Infinity); diff --git a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs index 28aaca1f5..c00d4fcb1 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs @@ -65,5 +65,18 @@ namespace UniVRM10 [SerializeField] public List Springs = new List(); + + + public (Spring, int)? FindJoint(VRM10SpringBoneJoint joint) + { + for (int i = 0; i < Springs.Count; ++i) + { + if (Springs[i].Joints.Contains(joint)) + { + return (Springs[i], i); + } + } + return default; + } } }