Я пытаюсь управлять своей камерой, используя IMU, подключенный к плате Arduino.Я следовал инструкциям этого урока и добился определенных успехов: http://www.marcteyssier.com/uduino/projects/connect-a-imu-to-unity
То есть я получил Unity для чтения данных с Arduino.Когда я прикрепил скрипт к игровому объекту (например, к кубу), он вращается вместе с движением IMU.
Однако проблема заключается в том, что для IMU нет ориентации по умолчанию.Я имею в виду, если я позволю ИДУ лежать на земле лицом вверх, то ось х в Unity будет указывать в одном направлении.Если я снова играю в игру, не касаясь IMU, ось X внезапно указывает в другом направлении.Вот картинка:
Мне не удалось получить другую картинку, когда ось X указывает в другом направлении, потому что это требует, чтобы я несколько раз играл в Unity, но доверяюсо мной так бывает.
Вот мой код, прикрепленный к кубу:
using UnityEngine;
using Udiono;
public class IMU: MonoBehaviour
{
public Vector3 rotationOffset;
Quaternion q;
public float smoothfactor = 15.0f;
void Start() {
UdionoManeger = Instance.OnValueRecieved += ReadIMU;
}
}
void Update()
{
string values = data.Split('\n');
if (values.Length >= 2)
{
string[] values = values[values.Length - 2].Split(' ');
if (values[0] == "QC")
{
q = new Quaternion(float.Parse(line[1]), float.Parse(line[2]), float.Parse(line[3]), float.Parse(line[4]));
transform.localRotation = Quaternion.Lerp(transform.localRotation, q, Time.deltaTime * speedfactor);
}
}
this.transform.parent.transform.eulerAngles = rotationOffset;
}
Забудьте о том, что находится в функции Start, сфокусируйтесь на этой строке:
q = new Quaternion(float.Parse(line[1]),
float.Parse(line[2]),
float.Parse(line[3]),
float.Parse(line[4]));
transform.localRotation = Quaternion.Lerp(transform.localRotation, q, Time.deltaTime * speedfactor);
И вотИзображение с моего серийного монитора Arduino Изображение 2
Очевидно, что Unity считывает ориентацию из IMU как кватернион.Но проблема в том, что нет ориентации по умолчанию.В одном случае вращение вокруг оси Y переводится в Unity в одно, а в другое - в другое.
Было бы неплохо, если бы я мог установить ориентацию IMU в Unity на какое-то значение по умолчанию.значение.
С уважением, если кто-то имеет решение этой проблемы или хотя бы знает, что происходит, поделитесь своим мнением здесь.
Спасибо,