diff --git a/.gitignore b/.gitignore index c78e61598..1e91fb883 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,4 @@ Assets/_Private.meta # sphinx build public *.pyc - +.venv diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs index 1dfc772d5..2911a0c96 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneCollider.cs @@ -26,5 +26,19 @@ namespace UniVRM10 public static int SelectedGuid; public bool IsSelected => GetInstanceID() == SelectedGuid; + + private void OnDrawGizmos() + { + Gizmos.matrix = transform.localToWorldMatrix; + switch (ColliderType) + { + case VRM10SpringBoneColliderTypes.Sphere: + Gizmos.DrawWireSphere(Offset, Radius); + break; + + case VRM10SpringBoneColliderTypes.Capsule: + break; + } + } } } diff --git a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs index 69c6075f4..ec0abade2 100644 --- a/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs +++ b/Assets/VRM10/Runtime/Components/SpringBone/VRM10SpringBoneJoint.cs @@ -27,14 +27,5 @@ namespace UniVRM10 [SerializeField, Range(0, 0.5f), Header("Collision")] public float m_jointRadius = 0.02f; - - public void DrawGizmo(Transform center, Color color) - { -#if UNITY_EDITOR - // Gizmos.matrix = Transform.localToWorldMatrix; - Gizmos.color = color; - Gizmos.DrawSphere(transform.position, m_jointRadius); -#endif - } } } diff --git a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs index 3b0d1dbd8..575cf5104 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10Instance.cs @@ -103,5 +103,17 @@ namespace UniVRM10 { Runtime.Dispose(); } + + private void OnDrawGizmos() + { + foreach (var spring in SpringBone.Springs) + { + foreach (var (head, tail) in spring.EnumHeadTail()) + { + Gizmos.DrawLine(head.transform.position, tail.transform.position); + Gizmos.DrawSphere(tail.transform.position, head.m_jointRadius); + } + } + } } } diff --git a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs index 24cb1f1d3..98b63e900 100644 --- a/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs +++ b/Assets/VRM10/Runtime/Components/Vrm10Instance/Vrm10InstanceSpringBone.cs @@ -37,6 +37,27 @@ namespace UniVRM10 { Name = name; } + + public IEnumerable<(VRM10SpringBoneJoint, Transform)> EnumHeadTail() + { + for (int i = 0; i < Joints.Count; ++i) + { + var head = Joints[i]; + if (head == null) + { + continue; + } + for (int j = i + 1; j < Joints.Count; ++j) + { + var tail = Joints[j]; + if (tail != null) + { + yield return (head, tail.transform); + break; + } + } + } + } } [SerializeField]