vkvk
@vkvk

Как ограничить угол камеры unity3d?

Всем привет! Сделал простое управление камерой, все работает, но у неё нет ограничений и я не знаю, как их добавить, вот код:
private void CameraMove()
    {

        mouseX = Input.GetAxis("Mouse X") * mouseSensivity;
        mouseY = Input.GetAxis("Mouse Y") * mouseSensivity;

        transform.Rotate(mouseX * new Vector3(0, 1, 0));
        cameraTransform.transform.Rotate(-mouseY * new Vector3(1, 0, 0));
    }

Пробовал ограничить значение mouseY с помощью Mathf.Clamp(), но все равно ничего не работает, тоже самое пытался сделать и напрямую с градусом камеры, но также ничего не меняется. Что с этим можно сделать?
  • Вопрос задан
  • 1410 просмотров
Решения вопроса 1
KraGenDeveloper
@KraGenDeveloper
Unity Developer
Юзать Mathf.Clamp(var, min, max)
private void CameraMove()
    {

        mouseX = Mathf.Clamp(Input.GetAxis("Mouse X") * mouseSensivity, minAngle, maxAngle);
        mouseY = Mathf.Clamp(Input.GetAxis("Mouse Y") * mouseSensivity, minAngle, maxAngle);

        transform.Rotate(mouseX * new Vector3(0, 1, 0));
        cameraTransform.transform.Rotate(-mouseY * new Vector3(1, 0, 0));
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Adm178
Если у вас проблема, что при достижении угла меньше 0 он тут же его преобразует в 360, то вот код как в таком случае сделать ограничение по камере:
float currentRotationX = transform.eulerAngles.x;
float currentRotationY = transform.eulerAngles.y;

currentRotationX -= Input.GetAxis("Mouse Y") * rotationSpeed;
currentRotationY += Input.GetAxis("Mouse X") * rotationSpeed;

if (currentRotationX < 180 && currentRotationX > 0)
    currentRotationX = Mathf.Clamp(currentRotationX, 0f, 50f);
if (currentRotationX < 0)
    currentRotationX += 360;
if (currentRotationX > 180)
    currentRotationX = Mathf.Clamp(currentRotationX, 310f, 360f);

Я заметил, что особенность в том, что currentRotationX может принимать отрицательные , но на следующем кадре тут же его преобразовывает в 360. Таким образом сначала мы работаем с углами меньше 180, но больше 0. Далее мы поставили условие, что если попадется currentRotationX меньше нуля, то мы в том же кадре его преобразуем в 360 и далее уже работаем с ограничением камеры при углах больше 180
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы