lvjincheng 4 ani în urmă
părinte
comite
49cdf72dec

+ 306 - 9
Assets/BowArrow/Scenes/Game.unity

@@ -7960,7 +7960,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u5F00\u59CB\u78C1\u573A\u6821\u9A8C"
+  m_Text: "\u5F00\u59CB\u5730\u78C1\u8BA1\u6821\u51C6"
 --- !u!222 &1082385027
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -8177,7 +8177,7 @@ GameObject:
   - component: {fileID: 1105832657}
   - component: {fileID: 1105832659}
   m_Layer: 5
-  m_Name: DebugText
+  m_Name: DebugText (1)
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -8195,7 +8195,7 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1979114040}
-  m_RootOrder: 6
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 1, y: 1}
   m_AnchorMax: {x: 1, y: 1}
@@ -9621,6 +9621,126 @@ MeshFilter:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1290491818}
   m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1293471639
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1293471640}
+  - component: {fileID: 1293471643}
+  - component: {fileID: 1293471642}
+  - component: {fileID: 1293471641}
+  m_Layer: 5
+  m_Name: Button (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1293471640
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1293471639}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 1394525658}
+  m_Father: {fileID: 1979114040}
+  m_RootOrder: 8
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -30, y: -386}
+  m_SizeDelta: {x: 200, y: 40}
+  m_Pivot: {x: 1, y: 1}
+--- !u!114 &1293471641
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1293471639}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 1293471642}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &1293471642
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1293471639}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1293471643
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1293471639}
+  m_CullTransparentMesh: 0
 --- !u!1 &1293801582
 GameObject:
   m_ObjectHideFlags: 0
@@ -10177,6 +10297,85 @@ Transform:
   m_Father: {fileID: 1009582748}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1394525657
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1394525658}
+  - component: {fileID: 1394525660}
+  - component: {fileID: 1394525659}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1394525658
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1394525657}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1293471640}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1394525659
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1394525657}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 24
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 0
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u5F00\u59CB\u9640\u87BA\u4EEA\u6821\u51C6"
+--- !u!222 &1394525660
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1394525657}
+  m_CullTransparentMesh: 0
 --- !u!1 &1414995148
 GameObject:
   m_ObjectHideFlags: 0
@@ -10678,7 +10877,7 @@ RectTransform:
   m_Children:
   - {fileID: 424183955}
   m_Father: {fileID: 1979114040}
-  m_RootOrder: 4
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 1, y: 1}
   m_AnchorMax: {x: 1, y: 1}
@@ -10863,6 +11062,100 @@ Transform:
   m_Father: {fileID: 194682095}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: -49.37568, y: 179.51602, z: -143.9575}
+--- !u!1 &1509022406
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1509022407}
+  - component: {fileID: 1509022410}
+  - component: {fileID: 1509022409}
+  - component: {fileID: 1509022408}
+  m_Layer: 5
+  m_Name: DebugText (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1509022407
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1509022406}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 1979114040}
+  m_RootOrder: 9
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: -30, y: -441}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 1, y: 1}
+--- !u!114 &1509022408
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1509022406}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalFit: 2
+  m_VerticalFit: 2
+--- !u!114 &1509022409
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1509022406}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 32
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 3
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u8C03\u8BD5\u4FE1\u606F\u8F93\u51FA"
+--- !u!222 &1509022410
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1509022406}
+  m_CullTransparentMesh: 0
 --- !u!1 &1509196139
 GameObject:
   m_ObjectHideFlags: 0
@@ -12175,8 +12468,10 @@ MonoBehaviour:
   textUI: {fileID: 1105832657}
   controlObj: {fileID: 1680053129}
   SetIdentity: {fileID: 1478558957}
-  CalibrationButton: {fileID: 1990278318}
+  MagCalibrationButton: {fileID: 1990278318}
+  GyrCalibrationButton: {fileID: 1293471641}
   MagScaleText: {fileID: 1105832657}
+  GyrScaleText: {fileID: 1509022409}
 --- !u!1 &1680621885
 GameObject:
   m_ObjectHideFlags: 0
@@ -12440,7 +12735,7 @@ GameObject:
   - component: {fileID: 1691070389}
   - component: {fileID: 1691070388}
   m_Layer: 5
-  m_Name: DebugText (1)
+  m_Name: DebugText
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -12458,7 +12753,7 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 1979114040}
-  m_RootOrder: 7
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -14648,10 +14943,12 @@ RectTransform:
   - {fileID: 391527373}
   - {fileID: 485623848}
   - {fileID: 29012940}
+  - {fileID: 1691070387}
   - {fileID: 1478558956}
   - {fileID: 1990278317}
   - {fileID: 1105832656}
-  - {fileID: 1691070387}
+  - {fileID: 1293471640}
+  - {fileID: 1509022407}
   m_Father: {fileID: 0}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -14734,7 +15031,7 @@ RectTransform:
   m_Children:
   - {fileID: 1082385025}
   m_Father: {fileID: 1979114040}
-  m_RootOrder: 5
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 1, y: 1}
   m_AnchorMax: {x: 1, y: 1}

+ 64 - 17
Assets/BowArrow/Scripts/Bluetooth/BluetoothAim.cs

@@ -17,8 +17,10 @@ public class BluetoothAim : MonoBehaviour
     [SerializeField] Text textUI;
     [SerializeField] Transform controlObj = default;
     [SerializeField] Button SetIdentity = default;
-    [SerializeField] Button CalibrationButton = default;
+    [SerializeField] Button MagCalibrationButton = default;
+    [SerializeField] Button GyrCalibrationButton = default;
     [SerializeField] Text MagScaleText = default;
+    [SerializeField] Text GyrScaleText = default;
 
     AimHandler aimHandler = null;
 
@@ -26,7 +28,7 @@ public class BluetoothAim : MonoBehaviour
 
     void Start()
     {
-        aimHandler = new AimHandler(controlObj, SetIdentity, CalibrationButton, MagScaleText);
+        aimHandler = new AimHandler(controlObj, SetIdentity, MagCalibrationButton, GyrCalibrationButton, MagScaleText, GyrScaleText);
         BluetoothDispatcher.aim = aimHandler.OnDataReceived;
     }
 
@@ -164,8 +166,10 @@ class AimHandler
 {
     public Transform controlObj;
     Button SetIdentity = default;
-    Button CalibrationButton = default;
+    Button MagCalibrationButton = default;
+    Button GyrCalibrationButton = default;
     Text MagScaleText = default;
+    Text GyrScaleText = default;
 
     long TimeGap = default;
     Vector3 Acc = default;
@@ -183,14 +187,22 @@ class AimHandler
     }
 
     o0MagneticCalibrater MagCalibrater;
-    o0Vector3Filter MagFilter = new o0Vector3Filter();
+    o0GyrCalibrater GyrCalibrater;
     long msOld = 0;
-    public AimHandler(Transform controlObj, Button SetIdentity, Button CalibrationButton, Text MagScaleText)
-    {
+    public AimHandler(
+        Transform controlObj, 
+        Button SetIdentity, 
+        Button MagCalibrationButton, 
+        Button GyrCalibrationButton, 
+        Text MagScaleText,
+        Text GyrScaleText
+    ) {
         this.controlObj = controlObj;
         this.SetIdentity = SetIdentity;
-        this.CalibrationButton = CalibrationButton;
+        this.MagCalibrationButton = MagCalibrationButton;
+        this.GyrCalibrationButton = GyrCalibrationButton;
         this.MagScaleText = MagScaleText;
+        this.GyrScaleText = GyrScaleText;
         
         if (SetIdentity != null) 
         {
@@ -198,23 +210,23 @@ class AimHandler
         }
         
         MagCalibrater = new o0MagneticCalibrater();
-        string caliraterDataStr = PlayerPrefs.GetString("o0MagneticCalibrater");
-        if (caliraterDataStr.Length > 0)
+        string magDataStr = PlayerPrefs.GetString("o0MagneticCalibrater");
+        if (magDataStr.Length > 0)
         {
-            string[] dataStrs = caliraterDataStr.Split(',');
+            string[] dataStrs = magDataStr.Split(',');
             if (dataStrs.Length == 6)
             {
                 MagCalibrater._Center =  new Vector3(float.Parse(dataStrs[0]), float.Parse(dataStrs[1]), float.Parse(dataStrs[2]));
                 MagCalibrater._Radius =  new Vector3(float.Parse(dataStrs[3]), float.Parse(dataStrs[4]), float.Parse(dataStrs[5]));
             }
         }
-        if (CalibrationButton != null)
+        if (MagCalibrationButton != null)
         {
-            CalibrationButton.onClick.AddListener(delegate {
+            MagCalibrationButton.onClick.AddListener(delegate {
                 if (MagCalibrater.Calibration)
                 {
                     MagCalibrater.Calibration = false;
-                    CalibrationButton.GetComponentInChildren<Text>().text = "开始磁场校准";
+                    MagCalibrationButton.GetComponentInChildren<Text>().text = "开始地磁计校准";
                     float[] dataFloats = new float[6];
                     dataFloats[0] = MagCalibrater.Center.x;
                     dataFloats[1] = MagCalibrater.Center.y;
@@ -228,7 +240,39 @@ class AimHandler
                 else
                 {
                     MagCalibrater.Calibration = true;
-                    CalibrationButton.GetComponentInChildren<Text>().text = "停止磁场校准";
+                    MagCalibrationButton.GetComponentInChildren<Text>().text = "停止地磁计校准";
+                }
+            });
+        }
+
+        GyrCalibrater = new o0GyrCalibrater();
+        string gyrDataStr = PlayerPrefs.GetString("o0GyrCalibrater");
+        if (gyrDataStr.Length > 0)
+        {
+            string[] dataStrs = gyrDataStr.Split(',');
+            if (dataStrs.Length == 3)
+            {
+                GyrCalibrater._Average =  new Vector3(float.Parse(dataStrs[0]), float.Parse(dataStrs[1]), float.Parse(dataStrs[2]));
+            }
+        }
+        if (GyrCalibrationButton != null)
+        {
+            GyrCalibrationButton.onClick.AddListener(delegate {
+                if (GyrCalibrater.Calibration)
+                {
+                    GyrCalibrater.Calibration = false;
+                    GyrCalibrationButton.GetComponentInChildren<Text>().text = "开始陀螺仪校准";
+                    float[] dataFloats = new float[3];
+                    dataFloats[0] = GyrCalibrater._Average.x;
+                    dataFloats[1] = GyrCalibrater._Average.y;
+                    dataFloats[2] = GyrCalibrater._Average.z;
+                    string dataStr = String.Join(",", dataFloats);
+                    PlayerPrefs.SetString("o0GyrCalibrater", dataStr);
+                }
+                else
+                {
+                    GyrCalibrater.Calibration = true;
+                    GyrCalibrationButton.GetComponentInChildren<Text>().text = "停止陀螺仪校准";
                 }
             });
         }
@@ -255,7 +299,7 @@ class AimHandler
         float az = -TwoByteToFloat(bytes[8], bytes[9]);
         ax = ax / 32768 * 16;
         ay = ay / 32768 * 16;
-        az = az / 32768 * 16;/**/
+        az = az / 32768 * 16;
         Acc = new Vector3(ax, ay, az);
 
         float roll = TwoByteToFloat(bytes[10], bytes[11]);
@@ -265,7 +309,11 @@ class AimHandler
         pitch = pitch / 32768 * 2000;
         yaw = -yaw / 32768 * 2000;
         Gyr = new Vector3(roll, pitch, yaw) / 1000;
-        var gyr = new Vector3(roll, pitch, yaw) / 1000 * 20;
+        Gyr = GyrCalibrater.Update(Gyr);
+        if (GyrScaleText != null) 
+        {
+            GyrScaleText.text = GyrCalibrater._Average.x + "\n" + GyrCalibrater._Average.y + "\n" + GyrCalibrater._Average.z;
+        }
 
         float x = TwoByteToFloat(bytes[16], bytes[17]);
         float y = TwoByteToFloat(bytes[18], bytes[19]);
@@ -329,7 +377,6 @@ class AimHandler
     bool doIdentity = false;
     bool hasAutoIdentity = false;
     Quaternion newRotation;
-    Quaternion baseRotation = new Quaternion(0, 0, 0, 1);
 
     public void InitAutoIdentity() 
     {

+ 48 - 1
Assets/BowArrow/Scripts/Bluetooth/o09Axis.cs

@@ -308,10 +308,57 @@ public class o0MagneticCalibrater//默认在无磁干扰环境下,有磁干扰
         foreach (var i in ScaleDistance)
             variance += Mathf.Pow(average - i, 2);
         variance /= ScaleDistance.Count;
-        return Mathf.Pow((1 - variance / average), 10) * PointMaxCount;
+        return Mathf.Pow((1 - variance / average), 10) * 100;
         //return variance;
     }
 }
+public class o0GyrCalibrater
+{
+    public Vector3 _Average = Vector3.zero;
+    public long Count = -1;
+    public bool Calibration
+    {
+        get
+        {
+            return Count != -1;
+        }
+        set
+        {
+            if (value)
+                Count = 0;
+            else
+                Count = -1;
+        }
+    }
+    public o0Project.Vector3f Average
+    {
+        get
+        {
+            return new o0Project.Vector3f(_Average.x, _Average.y, _Average.z);
+        }
+        set
+        {
+            _Average = new Vector3(value.x, value.y, value.z);
+        }
+    }
+    public o0GyrCalibrater()
+    {
+
+    }
+    public o0GyrCalibrater(o0Project.Vector3f Average)
+    {
+        this.Average = Average;
+    }
+    public Vector3 Update(Vector3 v)
+    {
+        if (Calibration)
+            _Average += (v - _Average) / ++Count;
+        v -= _Average;
+        if (v.magnitude < 0.0002)
+            return Vector3.zero;
+        return v;
+    }
+}
 public class o09Axis
 {
     static Vector3 AccIdentity = new Vector3(0, -1, 0);