lvjincheng 3 rokov pred
rodič
commit
f49f8985e5

+ 7 - 1
Assets/BowArrow/Scripts/Bluetooth/AimHandler.cs

@@ -280,7 +280,7 @@ public class AimHandler : MonoBehaviour
         if (ban9AxisCalculate) //如果箭射出后禁止九轴计算,就缓存最新几帧九轴数据
         {
             
-            if (cached9AxisFrames.Count < 2)
+            if (cached9AxisFrames.Count < 11)
             {
                 cached9AxisFrames.Enqueue(bytes);
             }
@@ -441,11 +441,17 @@ public class AimHandler : MonoBehaviour
             }
             catch (Exception) { }
             //恢复九轴计算时,把缓存的最新几帧计算了
+            bool isFirstFrame = true;
             while (cached9AxisFrames.Count > 0)
             {
                 try
                 {
                     OnDataReceived(cached9AxisFrames.Dequeue());
+                    //最初的一帧是用来顶掉msOld的,不会进state数组,因此不需要设置方差
+                    if (!isFirstFrame) {
+                        _9Axis.SetAccMagVariance(10000);
+                    }
+                    isFirstFrame = false;
                 }
                 catch (Exception) { }
             }

+ 7 - 0
Assets/BowArrow/Scripts/Bluetooth/o09Axis.cs

@@ -772,6 +772,13 @@ public class o09Axis
         }
     }
 
+    public void SetAccMagVariance(double value) {
+        if (axisCSBridge != null) {
+            axisCSBridge.SetAccMagVariance(value);
+            return;
+        }
+    }
+
     private Vector3 getAccIdentity() {
         if (axisCSBridge != null) {
             return axisCSBridge.GetAccIdentity_f();

+ 5 - 0
Assets/BowArrow/Scripts/Bluetooth/o09AxisCS.cs

@@ -293,4 +293,9 @@ public class o09AxisCS
         if (count <= 0 || States.Count == 0) return;
         States = States.GetRange(0, States.Count - count <= 0 ? 1 :  States.Count - count);
     }
+    
+    public void SetAccMagVariance(double value) {
+        States.Last().AccVariance = value;
+        States.Last().MagVariance = value;
+    }
 }

+ 4 - 0
Assets/BowArrow/Scripts/Bluetooth/o09AxisCSBridge.cs

@@ -30,6 +30,10 @@ public class o09AxisCSBridge {
     public void DeleteStatesFromTail(int count) {
         o09AxisCS.DeleteStatesFromTail(count);
     }
+
+    public void SetAccMagVariance(double value) {
+        o09AxisCS.SetAccMagVariance(value);
+    }
     
     public Vector3 GetAccIdentity_f() {
         return o09AxisCS.AccIdentity;