mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-09-11 05:19:14 -05:00
Normalize quaternion on update headTransform.rotation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user