diff --git a/Packages/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointMutable.cs b/Packages/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointMutable.cs index ccc69d2b60..8c592ac2eb 100644 --- a/Packages/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointMutable.cs +++ b/Packages/UniGLTF/Runtime/SpringBoneJobs/Blittables/BlittableJointMutable.cs @@ -38,6 +38,8 @@ public readonly struct BlittableJointMutable public float anglelimit2 => _data.c2.z; public quaternion anglelimitOffset => _data.c3.xyzw; + /// pitch when Spherical + /// yaw when Spherical public BlittableJointMutable(float stiffnessForce = 0, float gravityPower = 0, float3 gravityDir = default, diff --git a/Packages/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs b/Packages/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs index d2f44d2725..72ce15e8b3 100644 --- a/Packages/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs +++ b/Packages/VRM10/Editor/Components/SpringBone/VRM10SpringBoneJointEditor.cs @@ -88,7 +88,7 @@ public override void OnInspectorGUI() // // angle limit // - var fold = EditorGUILayout.Foldout(m_showAnglelimitSettings, "AngleLimit Settings (experimental)"); + var fold = EditorGUILayout.Foldout(m_showAnglelimitSettings, $"AngleLimit Settings (1.0-draft)"); if (m_showAnglelimitSettings != fold) { m_showAnglelimitSettings = fold; @@ -96,29 +96,36 @@ public override void OnInspectorGUI() } if (m_showAnglelimitSettings) { - EditorGUILayout.HelpBox("SpringBoneの角度制限はまだdraft仕様です。将来的に仕様が変更される可能性があります。また、VRMファイルへのインポート・エクスポート機能はまだ実装されていません。\nThe angle limit feature for SpringBone is still in draft status. The specifications may change in the future. Also, the import/export of VRM files has not yet been implemented.", MessageType.Warning); + EditorGUILayout.HelpBox("SpringBoneの角度制限はまだdraft仕様です。将来的に仕様が変更される可能性があります。\nThe angle limit feature for SpringBone is still in draft status. The specifications may change in the future.", MessageType.Warning); - EditorGUILayout.PropertyField(m_angleLimitType); - switch ((UniGLTF.SpringBoneJobs.AnglelimitTypes)m_angleLimitType.enumValueIndex) + if (isLastTail) { - case UniGLTF.SpringBoneJobs.AnglelimitTypes.None: - break; - - case UniGLTF.SpringBoneJobs.AnglelimitTypes.Cone: - EditorGUILayout.PropertyField(m_angleLimitRotation); - EditorGUILayout.PropertyField(m_angleLimitPitch); - break; - - case UniGLTF.SpringBoneJobs.AnglelimitTypes.Hinge: - EditorGUILayout.PropertyField(m_angleLimitRotation); - EditorGUILayout.PropertyField(m_angleLimitPitch); - break; - - case UniGLTF.SpringBoneJobs.AnglelimitTypes.Spherical: - EditorGUILayout.PropertyField(m_angleLimitRotation); - EditorGUILayout.PropertyField(m_angleLimitPitch); - EditorGUILayout.PropertyField(m_angleLimitYaw); - break; + EditorGUILayout.HelpBox("末端ノードでは無効です。", MessageType.Warning); + } + else + { + EditorGUILayout.PropertyField(m_angleLimitType); + switch ((UniGLTF.SpringBoneJobs.AnglelimitTypes)m_angleLimitType.enumValueIndex) + { + case UniGLTF.SpringBoneJobs.AnglelimitTypes.None: + break; + + case UniGLTF.SpringBoneJobs.AnglelimitTypes.Cone: + EditorGUILayout.PropertyField(m_angleLimitRotation); + EditorGUILayout.PropertyField(m_angleLimitPitch, new GUIContent("Angle")); + break; + + case UniGLTF.SpringBoneJobs.AnglelimitTypes.Hinge: + EditorGUILayout.PropertyField(m_angleLimitRotation); + EditorGUILayout.PropertyField(m_angleLimitPitch, new GUIContent("Angle")); + break; + + case UniGLTF.SpringBoneJobs.AnglelimitTypes.Spherical: + EditorGUILayout.PropertyField(m_angleLimitRotation); + EditorGUILayout.PropertyField(m_angleLimitPitch); + EditorGUILayout.PropertyField(m_angleLimitYaw); + break; + } } }