Merge pull request #2292 from LanternaBlender/master

Capsuleの当たり判定を修正 #2291
This commit is contained in:
ousttrue 2024-05-30 17:19:34 +09:00 committed by GitHub
commit ffaf60e4de
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -156,24 +156,31 @@ namespace UniVRM10.FastSpringBones.System
BlittableLogic logic,
ref Vector3 nextTail)
{
var P = (worldTail - worldPosition).normalized;
var direction = worldTail - worldPosition;
if (direction.sqrMagnitude == 0)
{
// head側半球の球判定
ResolveSphereCollision(joint, collider, worldPosition, headTransform, maxColliderScale, logic, ref nextTail);
return;
}
var P = direction.normalized;
var Q = headTransform.position - worldPosition;
var dot = Vector3.Dot(P, Q);
if (dot <= 0)
{
// head側半球の球判定
ResolveSphereCollision(joint, collider, worldPosition, headTransform, maxColliderScale, logic, ref nextTail);
return;
}
var t = dot / P.magnitude;
if (t >= 1.0f)
if (dot >= direction.magnitude)
{
// tail側半球の球判定
ResolveSphereCollision(joint, collider, worldTail, headTransform, maxColliderScale, logic, ref nextTail);
return;
}
// head-tail上の m_transform.position との最近点
var p = worldPosition + P * t;
var p = worldPosition + P * dot;
ResolveSphereCollision(joint, collider, p, headTransform, maxColliderScale, logic, ref nextTail);
}