Как повернуть объект с помощью Quaternion-ов по осям x и z чтобы координата y не менялась?

Чтобы повернуть объект с помощью кватернионов таким образом, чтобы координата y не менялась, вам нужно создать кватернион, который представляет вращение вокруг осей x и z с учетом этого требования.

Первое, что вам нужно сделать, это задать углы вращения по осям x и z. Пусть угол вращения вокруг оси x будет равен angleX, а угол вращения вокруг оси z будет равен angleZ.

Затем, вы можете создать кватернион для каждой из осей, используя класс Quaternion в C#:

Quaternion rotationX = Quaternion.Euler(angleX, 0, 0);
Quaternion rotationZ = Quaternion.Euler(0, 0, angleZ);

Метод Euler используется для создания кватерниона на основе углов Эйлера. В данном случае мы устанавливаем значения углов вращения только для осей x и z, а оставляем нулевые значения для оси y.

Затем, вы можете объединить два кватерниона в один, чтобы получить окончательное вращение объекта:

Quaternion finalRotation = rotationX * rotationZ;

Умножение кватернионов соответствует комбинированию их вращений. Исходя из того, что умножение кватернионов не коммутативно (порядок имеет значение), в данном случае мы сначала умножаем rotationX на rotationZ.

Теперь у вас есть кватернион finalRotation, который представляет вращение объекта вокруг осей x и z таким образом, чтобы координата y не менялась. Вы можете использовать этот кватернион для применения вращения к вашему объекту с помощью соответствующего метода или свойства в вашей реализации программы.