diff --git a/Assets/HandDriver/Scripts/HandDriver.cs b/Assets/HandDriver/Scripts/HandDriver.cs index e9cc1cb..e28de11 100644 --- a/Assets/HandDriver/Scripts/HandDriver.cs +++ b/Assets/HandDriver/Scripts/HandDriver.cs @@ -2,7 +2,7 @@ using NaughtyAttributes; using System.Collections.Generic; using TouchSocket.Core; using UnityEngine; -//IMU UNITY统一位姿版 2025/12/15 4574验证 +//IMU UNITY彻底修复版 2026/3/3更新 public class HandDriver : MonoBehaviour { @@ -448,26 +448,15 @@ public class HandDriver : MonoBehaviour } } - private Quaternion ConvertQuaternion(Quaternion quat, bool isRightHand) + private Quaternion ConvertQuaternion(Quaternion q, bool isRightHand) { - - - Quaternion q = new Quaternion(quat.x, quat.y, quat.z, quat.w); - - Vector3 e = q.eulerAngles; - // Euler(z, -x, y) - Quaternion result = Quaternion.Euler(e.z, -e.x, e.y); + // IMU→Unity 坐标轴映射,直接重映射四元数分量 + // 左手: IMU(X,Y,Z) → Unity(-Y, Z, X) 右手: IMU(X,Y,Z) → Unity(-Y, -Z, -X) if (isRightHand) { - result = Quaternion.Euler(-e.z , -e.x , -e.y ); + return new Quaternion(-q.z, -q.x, -q.y, q.w); } - - return result; - /* - Quaternion quat_r = new Quaternion(quat.x, quat.y, quat.z, quat.w); - quat_r = Quaternion.Euler(quat_r.eulerAngles.z, -quat_r.eulerAngles.x, quat_r.eulerAngles.y); - return quat_r; - */ + return new Quaternion(q.z, -q.x, q.y, q.w); } private void UpdateThumb()