Для поворота объекта только по осям x и z с сохранением неизменной координаты y, вы можете использовать следующий код:
```C#
public class PlatformRotator : MonoBehaviour
{
[SerializeField] private float _speed;
private Rigidbody _rigidbody;
private SwipeReader _input;
private void Awake()
{
_rigidbody = GetComponent<Rigidbody>();
_input = GetComponent<SwipeReader>();
}
private void Start()
{
_input.OnDirectionChanged += OnSwipingHandler;
}
private void OnSwipingHandler(Vector2 direction)
{
var currentRotation = transform.rotation;
// Обнуляем компоненту Y в направлении
direction.y = 0f;
// Создаем новый кватернион, поворачивая его только по осям x и z
// Используем Direction3D.normalized, чтобы сохранить единичную длину вектора
var targetRotation = Quaternion.Euler(direction.normalized * _speed) * currentRotation;
// Применяем новый поворот объекта, сохраняя неизменной координату Y
_rigidbody.MoveRotation(targetRotation);
}
private void OnDrawGizmos()
{
}
}
```
В этом коде мы обнуляем компоненту y в векторе направления, чтобы объект не вращался вокруг этой оси. Затем мы создаем новый кватернион, поворачивая его только по осям x и z, используя рассчитанный вектор направления. Наконец, мы применяем новый поворот к объекту, используя метод `MoveRotation` вместо `rotation`, чтобы сохранить стабильность физики ригидбоди.
Обратите внимание, что в этом коде нет контроля ограничения поворота. Если вы хотите добавить ограничения вращения по осям x и z, вам может потребоваться дополнительная логика.