// Overlaps ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── public override bool OverlapSphere(Vector3 center, float radius, HitInfoFilter hitInfoFilter) { int hits = Physics.OverlapSphereNonAlloc( center, radius, overlappedColliders, hitInfoFilter.collisionLayerMask, hitInfoFilter.ignoreTriggers ? QueryTriggerInteraction.Ignore : QueryTriggerInteraction.Collide ); this.hits = hits; return(hits != 0); }
// Overlaps ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── public override bool OverlapSphere(Vector3 center, float radius, HitInfoFilter hitInfoFilter) { bool previousQueriesHitTriggers = Physics2D.queriesHitTriggers; Physics2D.queriesHitTriggers = !hitInfoFilter.ignoreTriggers; hits = Physics2D.OverlapCircleNonAlloc( center, radius, overlappedColliders, hitInfoFilter.collisionLayerMask ); Physics2D.queriesHitTriggers = previousQueriesHitTriggers; return(hits != 0); }
public abstract bool OverlapCapsule(Vector3 bottom, Vector3 top, float radius, HitInfoFilter filter);
// Overlaps ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── public abstract bool OverlapSphere(Vector3 center, float radius, HitInfoFilter filter);
public abstract int CapsuleCast(out HitInfo hitInfo, Vector3 bottom, Vector3 top, float radius, Vector3 castDisplacement, HitInfoFilter filter);
public abstract int SphereCast(out HitInfo hitInfo, Vector3 center, float radius, Vector3 castDisplacement, HitInfoFilter filter);
// Casts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── public abstract int Raycast(out HitInfo hitInfo, Vector3 origin, Vector3 castDisplacement, HitInfoFilter filter);
protected abstract void GetClosestHit(out HitInfo hitInfo, Vector3 castDisplacement, HitInfoFilter filter);
protected override void GetClosestHit(out HitInfo hitInfo, Vector3 castDisplacement, HitInfoFilter hitInfoFilter) { RaycastHit2D closestRaycastHit = new RaycastHit2D(); closestRaycastHit.distance = Mathf.Infinity; hitInfo = new HitInfo(); hitInfo.hit = false; for (int i = 0; i < hits; i++) { RaycastHit2D raycastHit = raycastHits[i]; if (raycastHit.distance == 0) { continue; } bool continueSelf = false; for (int j = 0; j < self.Length; j++) { if (raycastHit.collider == self[j]) { continueSelf = true; break; } } if (continueSelf) { continue; } if (raycastHit.distance < hitInfoFilter.minimumDistance || raycastHit.distance > hitInfoFilter.maximumDistance) { continue; } if (hitInfoFilter.ignoreRigidbodies && raycastHit.collider.attachedRigidbody != null) { continue; } hitInfo.hit = true; if (raycastHit.distance < closestRaycastHit.distance) { closestRaycastHit = raycastHit; } } if (hitInfo.hit) { GetHitInfo(ref hitInfo, closestRaycastHit, castDisplacement.normalized); } }
public override bool OverlapCapsule(Vector3 bottom, Vector3 top, float radius, HitInfoFilter hitInfoFilter) { Vector3 bottomToTop = top - bottom; Vector3 center = bottom + 0.5f * bottomToTop; Vector2 size = new Vector2(2f * radius, bottomToTop.magnitude + 2f * radius); float castAngle = Vector2.SignedAngle(bottomToTop.normalized, Vector2.up); bool previousQueriesHitTriggers = Physics2D.queriesHitTriggers; Physics2D.queriesHitTriggers = !hitInfoFilter.ignoreTriggers; hits = Physics2D.OverlapCapsuleNonAlloc( center, size, CapsuleDirection2D.Vertical, castAngle, overlappedColliders, hitInfoFilter.collisionLayerMask ); Physics2D.queriesHitTriggers = previousQueriesHitTriggers; return(hits != 0); }
public override int SphereCast(out HitInfo hitInfo, Vector3 center, float radius, Vector3 castDisplacement, HitInfoFilter hitInfoFilter) { bool previousQueriesHitTriggers = Physics2D.queriesHitTriggers; Physics2D.queriesHitTriggers = !hitInfoFilter.ignoreTriggers; hits = Physics2D.CircleCastNonAlloc( center, radius, castDisplacement.normalized, raycastHits, castDisplacement.magnitude, hitInfoFilter.collisionLayerMask ); Physics2D.queriesHitTriggers = previousQueriesHitTriggers; GetClosestHit(out hitInfo, castDisplacement, hitInfoFilter); return(hits); }
public override int CapsuleCast(out HitInfo hitInfo, Vector3 bottom, Vector3 top, float radius, Vector3 castDisplacement, HitInfoFilter hitInfoFilter) { Vector3 bottomToTop = top - bottom; Vector3 center = bottom + 0.5f * bottomToTop.magnitude * bottomToTop.normalized; Vector2 size = new Vector2(2f * radius, bottomToTop.magnitude + 2f * radius); float castAngle = Vector2.SignedAngle(bottomToTop.normalized, Vector2.up); bool previousQueriesHitTriggers = Physics2D.queriesHitTriggers; Physics2D.queriesHitTriggers = !hitInfoFilter.ignoreTriggers; hits = Physics2D.CapsuleCastNonAlloc( center, size, CapsuleDirection2D.Vertical, castAngle, castDisplacement.normalized, raycastHits, castDisplacement.magnitude, hitInfoFilter.collisionLayerMask ); Physics2D.queriesHitTriggers = previousQueriesHitTriggers; GetClosestHit(out hitInfo, castDisplacement, hitInfoFilter); return(hits); }
public override int SphereCast(out HitInfo hitInfo, Vector3 center, float radius, Vector3 castDisplacement, HitInfoFilter hitInfoFilter) { hits = Physics.SphereCastNonAlloc( center, radius, castDisplacement.normalized, raycastHits, castDisplacement.magnitude, hitInfoFilter.collisionLayerMask, hitInfoFilter.ignoreTriggers ? QueryTriggerInteraction.Ignore : QueryTriggerInteraction.Collide ); GetClosestHit(out hitInfo, castDisplacement, hitInfoFilter); return(hits); }