Расчет расстояния при работе акселерометра и гироскопа в Unity

Я тестирую акселерометр и гироскоп в Unity. В моей игре 3d шары из центра экрана летят к цели за экраном (цель — это пустой GameObject с настроенными координатами). Движение шаров прописано в Update с помощью обычного изменения координат.

На сцене есть Image с фоном, который я поворачиваю в зависимости от работы акселерометра/гироскопа:

float curSpeed = Time.deltaTime * _speed;

if (Mathf.Abs(Input.acceleration.x) > noTiltWindow)
   _localRotation.z += Input.acceleration.x * curSpeed;
else
   _localRotation.z += Input.acceleration.x * (curSpeed / 2);

bg.transform.rotation = _localRotation;

Проблем с поворотом нет. Идея в том, чтобы менять направление шариков в зависимости от поворота смартфона.

Сейчас я просто беру угол поворота фона и вычисляю координату y, по которой потом пускаю шарики.

Vector3 temp = new Vector3();
float angle = bgTransform.localEulerAngles.z;
angle = (angle > 180) ? angle - 360 : angle;
temp.y = angle;

На первый взгляд работает, но совсем не так, как я бы хотел. Нужно, чтобы при повороте смартфона шарики были привязаны к углу поворота акселерометра или гироскопа.

По моей задумке, зная пройденное расстояние при повороте смартфона, можно будет направить шарики в нужную сторону.

Есть ли способ узнать расстояние, пройденное при повороте? И насколько вообще эта идея с измерением расстояния правильна?


Ответы (0 шт):