Вращение - шаг рысканья - PullRequest
       39

Вращение - шаг рысканья

1 голос
/ 12 марта 2019

Я пытаюсь повернуть объект, основываясь на значениях датчика (отклонение шага при повороте).У меня есть следующий фрагмент кода скрипта для поворота объекта.

if ((0<=ax&& ax<1.03f) && (0 <= az && az <1.03f))
        {
            if (x > calibrateX)
                x = x - calibrateX;
            else
                x = calibrateX - x;
            //x = Mathf.Abs(x);
            Debug.Log("0-90 Rotation on X @ " + x);

            Quaternion xangle = Quaternion.Euler(new Vector3(x, transform.eulerAngles.y, transform.eulerAngles.z));
            transform.rotation = Quaternion.Slerp(transform.rotation, xangle, Time.deltaTime * 2f);
        }
        //Pitch 90-180;
        else if ((0<= ax && ax<1.03f) && (-1.03f<=az && az< 0))
        {
            x = x+180;
            Debug.Log("90-180 Rotation on X @ " + x);
            Quaternion xangle = Quaternion.Euler(new Vector3(x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z));
            transform.rotation = Quaternion.Slerp(transform.rotation,xangle, Time.deltaTime*2f);
        }

Скрипт работает для углов от 0 до 90.Вращение происходит плавно и, как и ожидалось.Однако, когда угол составляет от 90 до 180, вращение объекта не является плавным.В редакторе похоже, что объект прыгает между двумя точками.Например, если угол равен 110 (xangle), объект прыгает между углом 110 и 70. Это происходит для любого угла между 90 - 180.

Мне нужна помощь, чтобы понять, что я делаю неправильно.Спасибо за ваше quan время.

1 Ответ

0 голосов
/ 13 марта 2019

Проблема, вероятно, в x = x + 180. Согласно документации Quaternion.Euler :

Возвращает вращение, которое вращает z градусов вокруг оси z, x градусов вокруг оси x и y градусов вокруг оси y.

Таким образом, если x изменяется от 0 до 90, а затем от 90 до 180, целевой поворот будет: От 0 до 90, а затем от 270 до 360.

Чтобы лучше понять проблему, вы можете опубликовать, как вычисляется х.

Так как теперь x кажется мне просто угловым шагом, решением было бы просто удалить x = x + 180.

...