Почему не работает код?Хочу ограничить вертикальный поворот камеры(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);
}
}