Beispiel #1
0
        // 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);
        }
Beispiel #2
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);
        }
Beispiel #3
0
 public abstract bool OverlapCapsule(Vector3 bottom, Vector3 top, float radius, HitInfoFilter filter);
Beispiel #4
0
        // Overlaps ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

        public abstract bool OverlapSphere(Vector3 center, float radius, HitInfoFilter filter);
Beispiel #5
0
 public abstract int CapsuleCast(out HitInfo hitInfo, Vector3 bottom, Vector3 top, float radius, Vector3 castDisplacement, HitInfoFilter filter);
Beispiel #6
0
 public abstract int SphereCast(out HitInfo hitInfo, Vector3 center, float radius, Vector3 castDisplacement, HitInfoFilter filter);
Beispiel #7
0
 // Casts ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
 public abstract int Raycast(out HitInfo hitInfo, Vector3 origin, Vector3 castDisplacement, HitInfoFilter filter);
Beispiel #8
0
 protected abstract void GetClosestHit(out HitInfo hitInfo, Vector3 castDisplacement, HitInfoFilter filter);
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        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);
        }
Beispiel #11
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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }