From 4da433fb247de67011e90a7080aa3546097e67de Mon Sep 17 00:00:00 2001 From: ousttrue Date: Tue, 2 Feb 2021 16:28:17 +0900 Subject: [PATCH] implement normalization for VRMSpringBoneColliderGroup --- .../SkinnedMeshUtility/VRMBoneNormalizer.cs | 8 +++++--- .../SpringBone/VRMSpringBoneColliderGroup.cs | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs b/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs index bf7271c5e..9fbdcf5d8 100644 --- a/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs +++ b/Assets/VRM/Runtime/SkinnedMeshUtility/VRMBoneNormalizer.cs @@ -130,6 +130,7 @@ namespace VRM } { + // springbone var secondary = go.transform.Find("secondary"); if (secondary == null) { @@ -143,7 +144,7 @@ namespace VRM dstSecondary.SetParent(root.transform, false); } - // ζΊγ‚Œγƒ’γƒŽ + // VRMSpringBoneColliderGroup foreach (var src in go.transform.GetComponentsInChildren()) { var dst = map[src.transform]; @@ -151,17 +152,18 @@ namespace VRM dstColliderGroup.Colliders = src.Colliders.Select(y => { var offset = dst.worldToLocalMatrix.MultiplyPoint(src.transform.localToWorldMatrix.MultiplyPoint(y.Offset)); + var ls = src.UniformedLossyScale; return new VRMSpringBoneColliderGroup.SphereCollider { Offset = offset, - Radius = y.Radius + Radius = y.Radius * ls }; }).ToArray(); } + // VRMSpringBone foreach (var src in go.transform.GetComponentsInChildren()) { - // Copy VRMSpringBone var dst = dstSecondary.gameObject.AddComponent(); dst.m_comment = src.m_comment; dst.m_stiffnessForce = src.m_stiffnessForce; diff --git a/Assets/VRM/Runtime/SpringBone/VRMSpringBoneColliderGroup.cs b/Assets/VRM/Runtime/SpringBone/VRMSpringBoneColliderGroup.cs index 0656d7425..9ad63c3ae 100644 --- a/Assets/VRM/Runtime/SpringBone/VRMSpringBoneColliderGroup.cs +++ b/Assets/VRM/Runtime/SpringBone/VRMSpringBoneColliderGroup.cs @@ -31,15 +31,23 @@ namespace VRM [SerializeField] Color m_gizmoColor = Color.magenta; + public float UniformedLossyScale + { + get + { + return Mathf.Max( + transform.lossyScale.x, + transform.lossyScale.y, + transform.lossyScale.z + ); + } + } + private void OnDrawGizmosSelected() { Gizmos.color = m_gizmoColor; Matrix4x4 mat = transform.localToWorldMatrix; - var ls = Mathf.Max( - transform.lossyScale.x, - transform.lossyScale.y, - transform.lossyScale.z - ); + var ls = UniformedLossyScale; Gizmos.matrix = mat * Matrix4x4.Scale(new Vector3( 1.0f / transform.lossyScale.x * ls, 1.0f / transform.lossyScale.y * ls,