Вращение Y изменяет значение X - PullRequest
0 голосов
/ 08 февраля 2019

Я зажимаю анимацию в LateUpdate:

    float fMinRotationLR = 320f;

    float fOldX = Chest.localEulerAngles.x;

    if (Chest.localRotation.eulerAngles.y < fMinRotationLR)
    {
         Chest.Rotate(new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z));
    }

    float fNewX = Chest.localEulerAngles.x;

Перед вызовом «Повернуть» fOldX равен 23, после вызова «Повернуть», fNewX равен 0.

Что здесь происходит и как бы мне это предотвратить?

Я уже пытался использовать

Chest.localEulerAngles = new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z);

, но это дает тот же результат.

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

transform.Rotate(x,y,z) или его эквивалент, который принимает Vector3, будет, в общем, вращать преобразование на x градусов вокруг оси x, y градусов вокруг оси y и т. Д. Итак, ваш оригинальный код:

Chest.Rotate(new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z));

повернет сундук * на 1006 * градусов вокруг оси x, чего достаточно, чтобы вернуть его к нулю.

Чтобы копнуть немного глубже, соглашение программного обеспечения гласит, что функция / метод обычно означает "действие, которое делает что-то ".Метод с именем SetRotation обычно равен rotation =.

В этом случае имя метода равно Rotate, поэтому по тому же соглашению мы можем сделать вывод, что это означает «повернуть преобразование на».API Unity придерживается этого соглашения довольно хорошо.

Ваша вторая попытка:

Chest.localEulerAngles = new Vector3(Chest.localRotation.x, fMinRotationLR, Chest.localRotation.z);

также не работает, потому что вы присваиваете значение Chest.localRotation (то есть Quaternion)) в Chest.localEulerAngles (который является Vector3).Quaternion - это Vector4, и это еще один метод (более надежный) для представления трехмерного состояния вращения.Он отличается от EulerAngles, поэтому значения не имеют того же значения.

Кажется, вы сами исправили проблему, я только объясняю, почему это происходит.

Chest.localEulerAngles = new Vector3(Chest.localRotation.eulerAngles.x, fMinRotationLR, Chest.localRotation.eulerAngles.z);
0 голосов
/ 08 февраля 2019

Я понял !!!: -)

            Chest.localEulerAngles = new Vector3(Chest.localRotation.eulerAngles.x, fMinRotationLR, Chest.localRotation.eulerAngles.z);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...