Добрый вечер! 
 Задача состоит в следующем: 
 "На сцене имеется камера и пушка со своими лучами, когда луч пушки выходит за пределы видимости камеры (по вертикали), требуется довернуть камеру вверх чтобы вернуть видимость. Луч у камеры всегда позиционирован в 20% от верхнего края (screehHeight*0.2)" 
 Казалось бы задача тривиальна, требуется найти угол между лучами и довернуть камеру на альфу. Но после проведенных расчетов камера не заворачивается до нужной позиции, постоянно либо выше, либо ниже требуемого. Буду признателен любой оказанной помощи, код и картинку для ясности происходящего прикладываю ниже. 
 P.S Дело не в длине луча, а именно в не верном повороте. 
 Код
 
 //cameraRayVector - взят Getpoint с луча у камеры 
 //gunRayVector - взят Getpoint с луча у пушки 
 //vAngle - находим угол между векторами, отнимаем от каждого вектора позицию камеры, для того чтобы угол считался не с нулевой позиции координат  
 float vAngle = Vector3.Angle((cameraRayVector - _mainCamera.transform.position), (gunRayVector - _mainCamera.transform.position)); 
                           Vector3 cross = Vector3.Cross((cameraRayVector - _mainCamera.transform.position), (gunRayVector - _mainCamera.transform.position)); 
                           if (cross.y < 0) vAngle = -vAngle; 
                           Quaternion quat = Quaternion.AngleAxis(vAngle, Vector3.right); 
                           _mainCamera.transform.rotation = Quaternion.Euler((quat * _mainCamera.transform.rotation.eulerAngles)); 
 
 