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)); }
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); } }