Exemple #1
0
    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);
    }