Работа с Euler Angles

Такой вопрос. Ограничиваю rotation объекта в игре, по оси y - все получилось, а по оси x - нет. Мне нужно ограничить от -40 до 40, но euler angles не принимает отрицательных значений. Код для ограничения по y -

if (_carTransform.eulerAngles.y < 160f)
    {
        _carTransform.eulerAngles = new Vector3(transform.eulerAngles.x, 160f, 0f);
    }
    else if (_carTransform.eulerAngles.y > 200f)
    {
        _carTransform.eulerAngles = new Vector3(transform.eulerAngles.x, 200f, 0f);
    }
    else
    {
        _carTransform.Rotate(_mouseDistance.y * _lookRateSpeed * Time.deltaTime, _mouseDistance.x * _lookRateSpeed * Time.deltaTime, 0f, Space.Self);
    }

Может подскажет кто альтернативу или возможное решение с euler? Застопорился - ужас


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

Автор решения: Yaroslav
[SerializeField] private Vector2 _LimitX = new Vector2(-60, 60);
private Transform _transform;

private void Awake () {
    _transform = transform;
}

private void Update () {
    Vector3 Angle = _transform.eulerAngles;
    while (Angle.x > 180f)
        Angle.x -= 360f;
    while (Angle.x < -180f)
        Angle.x += 360f;
    Angle.x = Mathf.Clamp(Angle.x, _LimitX.x, _LimitX.y);
    _transform.eulerAngles = Angle;
}
→ Ссылка