Unity SetPositionAndRotation не работает - PullRequest
0 голосов
/ 11 января 2020

Я хочу сделать 2D-проект с персонажем, который мгновенно перемещается на несколько пикселей и поворачивается на 90 °. Я попробовал это:

void Update() {
        transform.SetPositionAndRotation(new Vector2(transform.position.x + 1, transform.position.y), new Quaternion(transform.eulerAngles.x + 1, 0, 0, 0));
        Debug.Log("Rotation: " + transform.eulerAngles.x);
    }
}

Движение работает нормально, но вращение - нет. Я почти уверен, что transform.eulerAngles.x не правильная переменная.

  1. Символ вращается только один раз, и это имеет смысл, потому что консоль отладки постоянно говорит, что transform.eulerAngles.x - ноль , (поэтому 0 + 1 = 1).

  2. Он поворачивается на 180 ° вместо 90 °, и если я ставлю 0,5 вместо 1, единица говорит, что 0,5 - это двойное число.

1 Ответ

0 голосов
/ 11 января 2020

Quaternion довольно сложен и работает иначе, чем вы пытаетесь его использовать. В особенности

transform.eulerAngles.x

- это не то же самое, что

transform.rotation.x

, вы не можете просто смешивать значения пространства Эйлера и кватерниона!

Для своего вращения лучше использовать, например,

transform.rotation * Quaternion.Euler(90, 0, 0)

, который поворачивает текущее вращение на 90 ° по оси X (см. Оператор кватерниона *)

Никогда не трогайте значения Quaternion вручную, если вы этого не сделаете точно знать, что вы делаете

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