RaycastHit[] OptimizedCapsuleCastFromPlayer(float radiusScale, Vector3 direction, float distance, int layerMask)
 {
     return(OptimizedCast.CapsuleCastAll(point1, point2, radius * radiusScale, direction, distance, layerMask));
 }
 RaycastHit[] CapsuleCastAll(Vector3 direction, float distance)
 {
     return(OptimizedCast.CapsuleCastAll(capsuleCenter + pointOffset, capsuleCenter - pointOffset, radius * radiusScale, direction, distance, layerMask));
 }
Esempio n. 3
0
    void OnDrawGizmos()
    {
        Transform handleA = transform.GetChild(0);
        Transform handleB = transform.GetChild(1);

        if (handleA == null || handleB == null)
        {
            return;
        }

        float   distance  = Vector3.Distance(handleB.position, handleA.position);
        Vector3 direction = Vector3.Normalize(handleB.position - handleA.position);
        Vector3 capA      = handleA.position;
        Vector3 capB      = handleA.position + Vector3.up * _Height;

        RaycastHit[] hits = Physics.CapsuleCastAll(capA, capB, _Radius, direction, distance, _LayerMask);
        hits = hits.Where(x => x.transform != handleA && x.transform != handleB).ToArray();

        if (_OptimizeCast)
        {
            hits = OptimizedCast.CapsuleCastAll(capA, capB, _Radius, direction, distance, _LayerMask);
            hits = hits.Where(x => x.transform != handleA && x.transform != handleB).ToArray();
        }

        foreach (RaycastHit hit in hits)
        {
            if (_ShowHitPoints)
            {
                Gizmos.color = Color.red;
                Gizmos.DrawWireSphere(hit.point, 0.1f);
            }

            if (_ShowHitNormals)
            {
                Gizmos.color = Color.green;
                Gizmos.DrawLine(hit.point, hit.point + hit.normal);
            }

            if (_ShowDistances)
            {
                Gizmos.color = Color.magenta;
                Gizmos.DrawLine(capA, capA + direction * hit.distance);

                Gizmos.color = Color.magenta;
                Gizmos.DrawLine(capB, capB + direction * hit.distance);
            }

            if (_ShowHitCentre)
            {
                Gizmos.color = Color.yellow;
                Gizmos.DrawLine(capA + direction * hit.distance, capB + direction * hit.distance);

                Gizmos.color = Color.yellow;
                Gizmos.DrawWireSphere(capA + direction * hit.distance, 0.1f);

                Gizmos.color = Color.yellow;
                Gizmos.DrawWireSphere(capB + direction * hit.distance, 0.1f);
            }

            if (_ShowHitCapsule)
            {
                Gizmos.color = Color.yellow;
                Gizmos.DrawWireSphere(capA + direction * hit.distance, _Radius);

                Gizmos.color = Color.yellow;
                Gizmos.DrawWireSphere(capB + direction * hit.distance, _Radius);
            }
        }

        if (_ShowCastStart)
        {
            Gizmos.color = Color.blue;
            Gizmos.DrawWireSphere(handleA.position, _Radius);
            Gizmos.DrawWireSphere(handleA.position + Vector3.up * _Height, _Radius);
        }

        if (_ShowCastEnd)
        {
            Gizmos.color = Color.blue;
            Gizmos.DrawWireSphere(handleB.position, _Radius);
            Gizmos.DrawWireSphere(handleB.position + Vector3.up * _Height, _Radius);
        }

        if (_OptimizeCast && _ShowOptimizedStart)
        {
            Gizmos.color = Color.green;
            Gizmos.DrawWireSphere(capA - direction * _Radius, _Radius);
            Gizmos.DrawWireSphere(capB - direction * _Radius, _Radius);
            Gizmos.DrawLine(capA - direction * _Radius, capA);
            Gizmos.DrawLine(capB - direction * _Radius, capB);
        }
    }