Почему не работает код?Хочу ограничить вертикальный поворот камеры(Unity)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mouseLook : MonoBehaviour
{
    public float sensitivity = 9.0f;
    public float yAngle = 0;
    public float xAngle = 0;
    void Update()
    {
        xAngle -= Input.GetAxis("Mouse Y") * sensitivity;
        yAngle += Mathf.Clamp(Input.GetAxis("Mouse X") * sensitivity, -45, 45);
        transform.localEulerAngles = new Vector3(xAngle, yAngle, 0);
    }
}

Ответы (1 шт):

Автор решения: ssa112112

Обратите внимание на строчку

yAngle += Mathf.Clamp(Input.GetAxis("Mouse X") * sensitivity, -45, 45);

Заменяя оператор += это можно записать так

 yAngle = yAngle + Mathf.Clamp(Input.GetAxis("Mouse X") * sensitivity, -45, 45);

Таким образом с помощью Mathf.Clamp вы удерживаете в границах -45...+45 только дельту, но не само значение.

Что бы это исправить нужно заключить всё выражение в Mathf.Clamp, например так:

 yAngle = Mathf.Clamp(yAngle + Input.GetAxis("Mouse X") * sensitivity,-45, 45);

Кроме того, с высокой долей вероятности, вертикальной у вас будет ось Х.

Вот код, который позволяет ограничивать вращение камеры в двух измерениях:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mouseLook  : MonoBehaviour 
{
    public float sensitivity = 9.0f;
    public float yAngle = 0;
    public float xAngle = 0;
    public float yAngleVariation = 45f; //Change it
    public float xAngleVariation = 45f; //Change it

    void Update()
    {
        xAngle = Mathf.Clamp(xAngle - Input.GetAxis("Mouse Y") * sensitivity,-xAngleVariation,xAngleVariation);
        yAngle = Mathf.Clamp(yAngle + Input.GetAxis("Mouse X") * sensitivity,-yAngleVariation,yAngleVariation);
        transform.localEulerAngles = new Vector3(xAngle, yAngle, 0);
    }
}
→ Ссылка