implement normalization for VRMSpringBoneColliderGroup

This commit is contained in:
ousttrue
2021-02-02 16:28:17 +09:00
parent 1bf79f326f
commit 4da433fb24
2 changed files with 18 additions and 8 deletions

View File

@@ -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<VRMSpringBoneColliderGroup>())
{
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<VRMSpringBone>())
{
// Copy VRMSpringBone
var dst = dstSecondary.gameObject.AddComponent<VRMSpringBone>();
dst.m_comment = src.m_comment;
dst.m_stiffnessForce = src.m_stiffnessForce;

View File

@@ -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,