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);