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(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.Compound: { CompoundCollider col = collider; return(DistanceBetween(col, colliderTransform, capsule, capsuleTransform, maxDistance, out result)); } default: result = default; return(false); } }
public static bool DistanceBetween(Collider colliderA, RigidTransform aTransform, Collider colliderB, RigidTransform bTransform, float maxDistance, out ColliderDistanceResult result) { switch (colliderA.type) { case ColliderType.Sphere: { SphereCollider colA = colliderA; return(DistanceBetween(colA, aTransform, colliderB, bTransform, maxDistance, out result)); } case ColliderType.Capsule: { CapsuleCollider colA = colliderA; return(DistanceBetween(colA, aTransform, colliderB, bTransform, maxDistance, out result)); } case ColliderType.Compound: { CompoundCollider colA = colliderA; return(DistanceBetween(colA, aTransform, colliderB, bTransform, maxDistance, out result)); } default: result = default; return(false); } }
private static ColliderDistanceResult FlipResult(ColliderDistanceResult resultToFlip) { return(new ColliderDistanceResult { hitpointA = resultToFlip.hitpointB, hitpointB = resultToFlip.hitpointA, normalA = resultToFlip.normalB, normalB = resultToFlip.normalA, distance = resultToFlip.distance }); }
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); }