Добрый вечер!
Задача состоит в следующем:
"На сцене имеется камера и пушка со своими лучами, когда луч пушки выходит за пределы видимости камеры (по вертикали), требуется довернуть камеру вверх чтобы вернуть видимость. Луч у камеры всегда позиционирован в 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));