From 99fc71988dec027167faaee4c6932111a6733140 Mon Sep 17 00:00:00 2001 From: SuGar-456 Date: Tue, 3 Mar 2026 13:53:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=BB=E5=BA=95=E4=BF=AE=E5=A4=8D=E6=AC=A7?= =?UTF-8?q?=E6=8B=89=E8=A7=92=E4=B8=87=E5=90=91=E9=94=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改欧拉角为四元数,彻底修复欧拉角在某些角度方向无法达到的问题 --- Assets/HandDriver/Scripts/HandDriver.cs | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) 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()