From 1e4b0547903c9e2c2fe9c7211f4aed1352e7af97 Mon Sep 17 00:00:00 2001 From: notargs Date: Tue, 19 Oct 2021 16:18:17 +0900 Subject: [PATCH] Normalize quaternion on update headTransform.rotation --- .../System/UpdateFastSpringBoneJob.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs index 33b2246c2..af25beddf 100644 --- a/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs +++ b/Assets/VRM10/Runtime/FastSpringBone/System/UpdateFastSpringBoneJob.cs @@ -28,7 +28,9 @@ namespace UniVRM10.FastSpringBones.System var colliderSpan = spring.colliderSpan; var logicSpan = spring.logicSpan; - for (var logicIndex = logicSpan.startIndex; logicIndex < logicSpan.startIndex + logicSpan.count; ++logicIndex) + for (var logicIndex = logicSpan.startIndex; + logicIndex < logicSpan.startIndex + logicSpan.count; + ++logicIndex) { var logic = Logics[logicIndex]; var joint = Joints[logicIndex]; @@ -71,20 +73,23 @@ namespace UniVRM10.FastSpringBones.System nextTail = headTransform.position + (nextTail - headTransform.position).normalized * logic.length; // Collisionで移動 - for (var colliderIndex = colliderSpan.startIndex; colliderIndex < colliderSpan.startIndex + colliderSpan.count; ++colliderIndex) + for (var colliderIndex = colliderSpan.startIndex; + colliderIndex < colliderSpan.startIndex + colliderSpan.count; + ++colliderIndex) { var collider = Colliders[colliderIndex]; var colliderTransform = Transforms[collider.transformIndex]; var worldPosition = colliderTransform.localToWorldMatrix.MultiplyPoint3x4(collider.offset); var worldTail = colliderTransform.localToWorldMatrix.MultiplyPoint3x4(collider.tail); - + switch (collider.colliderType) { case BlittableColliderType.Sphere: - ResolveSphereCollision(joint, collider, worldPosition, headTransform, logic, ref nextTail); + ResolveSphereCollision(joint, collider, worldPosition, headTransform, logic, ref nextTail); break; case BlittableColliderType.Capsule: - ResolveCapsuleCollision(worldTail, worldPosition, headTransform, joint, collider, logic, ref nextTail); + ResolveCapsuleCollision(worldTail, worldPosition, headTransform, joint, collider, logic, + ref nextTail); break; } } @@ -106,7 +111,8 @@ namespace UniVRM10.FastSpringBones.System if (parentTransform.HasValue) { var parentLocalToWorldMatrix = parentTransform.Value.localToWorldMatrix; - headTransform.localRotation = Quaternion.Inverse(parentTransform.Value.rotation) * headTransform.rotation; + headTransform.localRotation = + (Quaternion.Inverse(parentTransform.Value.rotation) * headTransform.rotation).normalized; headTransform.localToWorldMatrix = parentLocalToWorldMatrix * Matrix4x4.TRS( @@ -179,7 +185,8 @@ namespace UniVRM10.FastSpringBones.System var normal = (nextTail - worldPosition).normalized; var posFromCollider = worldPosition + normal * (joint.radius + collider.radius); // 長さをboneLengthに強制 - nextTail = headTransform.position + (posFromCollider - headTransform.position).normalized * logic.length; + nextTail = headTransform.position + + (posFromCollider - headTransform.position).normalized * logic.length; } } }