protected Ray AimAssistRayCorrection(Ray ray) { //Boxcast if (Physics.SphereCast(ray, owner.aimAssistRadius, out RaycastHit sphereHit, owner.aimAssistRange, owner.ShootingLayerMask)) { Hitbox hitbox = sphereHit.transform.GetComponent <Hitbox>(); if (hitbox != null) { float maxAngle = Mathf.Asin(owner.aimAssistRadius / sphereHit.distance); float enemyAngle = GeneralHelper.AngleAroundAxis(owner.cam.transform.forward, hitbox.ZombieParent.transform.position - owner.cam.transform.position, Vector3.up); maxAngle = maxAngle * Mathf.Rad2Deg * -(enemyAngle / Mathf.Abs(enemyAngle)); Vector3 maxRot = Quaternion.AngleAxis(maxAngle, Vector3.up) * owner.cam.transform.forward; Vector3 enemyRot = Quaternion.AngleAxis(-enemyAngle, Vector3.up) * owner.cam.transform.forward; if (Mathf.Abs(GeneralHelper.AngleAroundAxis(ray.direction, enemyRot, Vector3.up)) < Mathf.Abs(maxAngle)) { ray = new Ray(owner.cam.transform.position, enemyRot); } else { ray = new Ray(owner.cam.transform.position, maxRot); } } } return(ray); }