Не могу ограничить вращение объекта Unity3D - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть объект в моей сцене, который двигается вперед и вращается с помощью input.GetAxis, и я хочу ограничить его вращение по оси X в диапазоне от -45 до 45 градусов. Поэтому я попробовал метод Clamp, но объект больше не может вращаться! что-то не так в моем коде?

float Speed = 10f;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

    transform.Rotate(-Input.GetAxis("Vertical") * 2f, 0, -Input.GetAxis("Horizontal"));

    float rotationX = Mathf.Clamp(transform.rotation.x, -45.0f, 45.0f);
    transform.localEulerAngles = new Vector3(rotationX, transform.localEulerAngles.y, transform.localEulerAngles.z);
}

private void FixedUpdate()
{
    transform.position += transform.forward * Speed * Time.fixedDeltaTime;
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Основной проблемой, связанной с наличием у вас atm, является transform.rotation - это кватернион, а не вектор3. Поскольку кватернионы имеют минимальное / максимальное значение -1/1, векторное вращение X не может быть вне этого диапазона.

Вы, вероятно, хотели сделать: float вращениеX = Mathf.Clamp (transform.localEulerAngles.x, -45.0f, 45.0f);

0 голосов
/ 01 апреля 2020

Лично я не стал бы пытаться установить localEulerAngles напрямую, я бы сбросил вращение на Quaternion.Identity (без вращения) или на другое вращение эталонного преобразования, а затем использовал бы Transform.rotatetateX градусов вокруг желаемой оси всякий раз, когда вращение изменяется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...