public static bool DistanceBetween(CapsuleCollider capsule, RigidTransform capsuleTransform, SphereCollider sphere, RigidTransform sphereTransform, float maxDistance, out ColliderDistanceResult result) { var capWorldToLocal = math.inverse(capsuleTransform); var sphereInCapSpaceTransfrom = math.mul(capWorldToLocal, sphereTransform); float3 sphereCenterInCapSpace = math.transform(sphereInCapSpaceTransfrom, sphere.center); SphereCollider sphereInCapSpace = new SphereCollider(sphereCenterInCapSpace, sphere.radius); bool hit = DistanceQueries.DistanceBetween(capsule, sphereInCapSpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = new ColliderDistanceResult { hitpointA = math.transform(capsuleTransform, localResult.hitpointA), hitpointB = math.transform(capsuleTransform, localResult.hitpointB), normalA = math.rotate(capsuleTransform, localResult.normalA), normalB = math.rotate(capsuleTransform, localResult.normalB), distance = localResult.distance }; return(hit); }
public static bool DistanceBetween(BoxCollider box, RigidTransform boxTransform, SphereCollider sphere, RigidTransform sphereTransform, float maxDistance, out ColliderDistanceResult result) { var boxWorldToLocal = math.inverse(boxTransform); float3 sphereCenterInBoxSpace = math.transform(boxWorldToLocal, sphere.center + sphereTransform.pos); SphereCollider sphereInBoxSpace = new SphereCollider(sphereCenterInBoxSpace, sphere.radius); bool hit = DistanceQueries.DistanceBetween(box, sphereInBoxSpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = new ColliderDistanceResult { hitpointA = math.transform(boxTransform, localResult.hitpointA), hitpointB = math.transform(boxTransform, localResult.hitpointB), normalA = math.rotate(boxTransform, localResult.normalA), normalB = math.rotate(boxTransform, localResult.normalB), distance = localResult.distance }; return(hit); }
public static bool DistanceBetween(SphereCollider sphere, RigidTransform sphereTransform, CapsuleCollider capsule, RigidTransform capsuleTransform, float maxDistance, out ColliderDistanceResult result) { bool hit = DistanceBetween(capsule, capsuleTransform, sphere, sphereTransform, maxDistance, out ColliderDistanceResult flipResult); result = FlipResult(flipResult); return(hit); }
public static bool DistanceBetween(CompoundCollider compound, RigidTransform compoundTransform, SphereCollider sphere, RigidTransform sphereTransform, float maxDistance, out ColliderDistanceResult result) { bool hit = false; result = default; result.distance = float.MaxValue; ref var blob = ref compound.compoundColliderBlob.Value;
public static bool DistanceBetween(CapsuleCollider capsule, RigidTransform capsuleTransform, BoxCollider box, RigidTransform boxTransform, float maxDistance, out ColliderDistanceResult result) { bool hit = DistanceBetween(box, boxTransform, capsule, capsuleTransform, maxDistance, out ColliderDistanceResult flipResult); result = FlipResult(flipResult); return(hit); }
public static bool DistanceBetween(SphereCollider sphere, RigidTransform sphereTransform, BoxCollider box, RigidTransform boxTransform, float maxDistance, out ColliderDistanceResult result) { bool hit = DistanceBetween(box, boxTransform, sphere, sphereTransform, maxDistance, out ColliderDistanceResult flipResult); result = FlipResult(flipResult); return(hit); }
public static bool DistanceBetween(CapsuleCollider capsuleA, RigidTransform aTransform, CapsuleCollider capsuleB, RigidTransform bTransform, float maxDistance, out ColliderDistanceResult result) { var aWorldToLocal = math.inverse(aTransform); var BinASpaceTransform = math.mul(aWorldToLocal, bTransform); CapsuleCollider BinASpace = new CapsuleCollider(math.transform(BinASpaceTransform, capsuleB.pointA), math.transform(BinASpaceTransform, capsuleB.pointB), capsuleB.radius); bool hit = DistanceQueries.DistanceBetween(capsuleA, BinASpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = BinAResultToWorld(localResult, aTransform); return(hit); }
public static bool DistanceBetween(BoxCollider box, RigidTransform boxTransform, CapsuleCollider capsule, RigidTransform capsuleTransform, float maxDistance, out ColliderDistanceResult result) { var boxWorldToLocal = math.inverse(boxTransform); var capInBoxSpaceTransform = math.mul(boxWorldToLocal, capsuleTransform); var capsuleInBoxSpace = new CapsuleCollider(math.transform(capInBoxSpaceTransform, capsule.pointA), math.transform(capInBoxSpaceTransform, capsule.pointB), capsule.radius); bool hit = DistanceQueries.DistanceBetween(box, capsuleInBoxSpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = BinAResultToWorld(localResult, boxTransform); return(hit); }
public static bool DistanceBetween(SphereCollider sphereA, RigidTransform aTransform, SphereCollider sphereB, RigidTransform bTransform, float maxDistance, out ColliderDistanceResult result) { SphereCollider bInASpace = new SphereCollider(sphereB.center + bTransform.pos - aTransform.pos, sphereB.radius); bool hit = DistanceQueries.DistanceBetween(sphereA, bInASpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = new ColliderDistanceResult { hitpointA = localResult.hitpointA + aTransform.pos, hitpointB = localResult.hitpointB + aTransform.pos, normalA = localResult.normalA, normalB = localResult.normalB, distance = localResult.distance }; return(hit); }
public static bool DistanceBetween(BoxCollider boxA, RigidTransform aTransform, BoxCollider boxB, RigidTransform bTransform, float maxDistance, out ColliderDistanceResult result) { var aWorldToLocal = math.inverse(aTransform); var bWorldToLocal = math.inverse(bTransform); var bInASpaceTransform = math.mul(aWorldToLocal, bTransform); var aInBSpaceTransform = math.mul(bWorldToLocal, aTransform); var hit = DistanceQueries.DistanceBetween(boxA, boxB, bInASpaceTransform, aInBSpaceTransform, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = BinAResultToWorld(localResult, aTransform); return(hit); }
public static bool DistanceBetween(SphereCollider sphereA, RigidTransform aTransform, SphereCollider sphereB, RigidTransform bTransform, float maxDistance, out ColliderDistanceResult result) { var aWorldToLocal = math.inverse(aTransform); var bInASpaceTransform = math.mul(aWorldToLocal, bTransform); SphereCollider bInASpace = new SphereCollider(math.transform(bInASpaceTransform, sphereB.center), sphereB.radius); bool hit = DistanceQueries.DistanceBetween(sphereA, bInASpace, maxDistance, out DistanceQueries.ColliderDistanceResultInternal localResult); result = new ColliderDistanceResult { hitpointA = math.transform(aTransform, localResult.hitpointA), hitpointB = math.transform(aTransform, localResult.hitpointB), normalA = math.rotate(aTransform, localResult.normalA), normalB = math.rotate(aTransform, localResult.normalB), distance = localResult.distance }; return(hit); }
public static bool DistanceBetween(Collider collider, RigidTransform colliderTransform, CapsuleCollider capsule, RigidTransform capsuleTransform, float maxDistance, out ColliderDistanceResult result) { switch (collider.type) { case ColliderType.Sphere: { SphereCollider col = collider; return(DistanceBetween(col, colliderTransform, capsule, capsuleTransform, maxDistance, out result)); } case ColliderType.Capsule: { CapsuleCollider col = collider; return(DistanceBetween(col, colliderTransform, capsule, capsuleTransform, maxDistance, out result)); } case ColliderType.Box: { BoxCollider col = collider; return(DistanceBetween(col, colliderTransform, capsule, capsuleTransform, maxDistance, out result)); } case ColliderType.Compound: { CompoundCollider col = collider; return(DistanceBetween(col, colliderTransform, capsule, capsuleTransform, maxDistance, out result)); } default: result = default; return(false); } }