فهرست منبع

Merge remote-tracking branch 'remotes/origin/master' into insertcoin

# Conflicts:
#	Assets/BowArrow/Scripts/View/Home/HomeView.cs
合并
slambb 11 ماه پیش
والد
کامیت
ac11d6ea8b
19فایلهای تغییر یافته به همراه1229 افزوده شده و 157 حذف شده
  1. 184 34
      Assets/BowArrow/Fonts/HarmonyOS_Sans_SC_Regular SDF.asset
  2. 42 5
      Assets/BowArrow/InfraredCamera/InfraredDemo.cs
  3. 7 11
      Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.prefab
  4. 7 39
      Assets/BowArrow/Resources/Prefabs/Views/Home/DeviceViewInfrared.prefab
  5. 30 1
      Assets/BowArrow/Scripts/Bluetooth/BluetoothAim.cs
  6. 13 7
      Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json
  7. 13 7
      Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json
  8. 10 2
      Assets/BowArrow/Scripts/View/Home/DeviceViewInfrared.cs
  9. 9 6
      Assets/BowArrow/Scripts/View/Home/DeviceView_ItemShow.cs
  10. 5 1
      Assets/BowArrow/Scripts/View/Home/HomeView.cs
  11. BIN
      Assets/InfraredProject/WebCamera/Image/crosshair4.png
  12. 123 0
      Assets/InfraredProject/WebCamera/Image/crosshair4.png.meta
  13. 6 0
      Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs
  14. 583 25
      Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredScreenPositioningView.prefab
  15. 59 15
      Assets/SmartBow/Scripts/Views/InfraredViewParts/InfraredScreenPositioningView.cs
  16. 11 1
      Assets/SmartBow/Scripts/Views/InfraredViewParts/PointMarker.cs
  17. 4 3
      Assets/SmartBow/SmartBowSDK/BleWinHelper.cs
  18. BIN
      Assets/SmartBow/Textures/Guidance/Infrared/selected2.png
  19. 123 0
      Assets/SmartBow/Textures/Guidance/Infrared/selected2.png.meta

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 184 - 34
Assets/BowArrow/Fonts/HarmonyOS_Sans_SC_Regular SDF.asset


+ 42 - 5
Assets/BowArrow/InfraredCamera/InfraredDemo.cs

@@ -419,6 +419,7 @@ public class InfraredDemo : JCUnityLib.ViewBase
                         textObj.text = _value + "";
                         //Debug.Log("Slider value changed to: " + newValue + " from " + _VALUE);
                         cameraInfo.SetValue(typeStr, _value);
+                        paramFloatValue.Set(_value);
 
                     });
                 }
@@ -1449,15 +1450,51 @@ public class InfraredDemo : JCUnityLib.ViewBase
     }
     void OnClick_ScreenLocateManual()
     {
-        ViewManager2.ShowView(ViewManager2.Path_InfraredScreenPositioningView);
-        FindObjectOfType<InfraredScreenPositioningView>().enterFromInfraredDemo = true;
+        bool bEnter = true;
+        if (BluetoothAim.ins && BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
+        {
+            if (BluetoothAim.ins.isMainConnectToInfraredDevice() || BluetoothAim.ins.isMainConnectToGun())
+            {
+                bEnter = true;
+            }
+            else
+            {
+                bEnter = false;
+                //只有红外设备才能进行屏幕识别
+                PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("Connect_Tip_Infrared"));
+            }
+        }
+        if (bEnter)
+        {
+            ViewManager2.ShowView(ViewManager2.Path_InfraredScreenPositioningView);
+            FindObjectOfType<InfraredScreenPositioningView>().enterFromInfraredDemo = true;
+        }
     }
 
     void OnClick_ScreenLocateManualAuto()
     {
-        ResetCenterOffset();
-        ResetPositioningData();
-        infraredCameraHelper.EnterScreenLocateManualAuto();
+        bool bEnter = true;
+        if (BluetoothAim.ins && BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
+        {
+            if (BluetoothAim.ins.isMainConnectToInfraredDevice() || BluetoothAim.ins.isMainConnectToGun())
+            {
+                bEnter = true;
+             
+            }
+            else
+            {
+                bEnter = false;
+                //只有红外设备才能进行屏幕识别
+                PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("Connect_Tip_Infrared"));
+            }
+        }
+
+        if (bEnter) {
+            ResetCenterOffset();
+            ResetPositioningData();
+            infraredCameraHelper.EnterScreenLocateManualAuto();
+        }
+     
     }
 
    public void OnClick_SetAdjustPointsOffset()

+ 7 - 11
Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.prefab

@@ -2222,7 +2222,7 @@ MonoBehaviour:
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
     m_FontSize: 37
-    m_FontStyle: 0
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 3
     m_MaxSize: 40
@@ -2232,9 +2232,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: "Double click the button on the device to calibrate the center of gravity.\nThen,
-    use the normal bow position and aim at the target with the arrow head\n as the
-    reference point. After 10 seconds, complete the center of gravity calibration."
+  m_Text: "\u53CC\u51FB\u8BBE\u5907\u4E0A\u7684\u6309\u952E\uFF0C\u4E4B\u540E\u7528\u6B63\u5E38\u7684\u62C9\u5F13\u59FF\u52BF\uFF0C\\n\u4EE5\u7BAD\u7B52\u5934\u90E8\u7784\u51C6\u9776\u5FC3\uFF0C{0}\u79D2\u540E\u51C6\u5FC3\u4F1A\u79FB\u52A8\u5230\u9776\u5FC3\uFF0C\u5B8C\u6210\u51C6\u5FC3\u6821\u51C6\u3002"
 --- !u!114 &3504678814842224122
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -2682,7 +2680,7 @@ MonoBehaviour:
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
     m_FontSize: 36
-    m_FontStyle: 0
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 3
     m_MaxSize: 40
@@ -4271,7 +4269,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  textKey: TopTip_CrossHairPro
+  textKey: TopTip_CrossHair
   layoutRebuildObject: {fileID: 0}
   languageFontSizes:
   - language: 0
@@ -6626,9 +6624,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: Press and hold the button on the device <sprite=0>, then assume a normal
-    bow-drawing posture. Aim the arrowhead at the target center, and after 10 seconds,
-    the crosshair will move to the target center, completing the crosshair calibration.
+  m_text: "\u957F\u6309\u8BBE\u5907\u4E0A\u7684\u6309\u952E <sprite=0>\uFF0C\u4E4B\u540E\u7528\u6B63\u5E38\u7684\u62C9\u5F13\u59FF\u52BF\uFF0C\n\u4EE5\u7BAD\u7B52\u5934\u90E8\u7784\u51C6\u9776\u5FC3\uFF0C10\u79D2\u540E\u51C6\u5FC3\u4F1A\u79FB\u52A8\u5230\u9776\u5FC3\uFF0C\u5B8C\u6210\u51C6\u5FC3\u6821\u51C6"
   m_isRightToLeft: 0
   m_fontAsset: {fileID: 11400000, guid: bbcfb1567bce0b641adc9310d760d234, type: 2}
   m_sharedMaterial: {fileID: -8666424993308654677, guid: bbcfb1567bce0b641adc9310d760d234, type: 2}
@@ -6661,13 +6657,13 @@ MonoBehaviour:
   m_enableAutoSizing: 0
   m_fontSizeMin: 18
   m_fontSizeMax: 72
-  m_fontStyle: 0
+  m_fontStyle: 1
   m_HorizontalAlignment: 2
   m_VerticalAlignment: 512
   m_textAlignment: 65535
   m_characterSpacing: 0
   m_wordSpacing: 0
-  m_lineSpacing: 0
+  m_lineSpacing: 31
   m_lineSpacingMax: 0
   m_paragraphSpacing: 0
   m_charWidthMaxAdj: 0

+ 7 - 39
Assets/BowArrow/Resources/Prefabs/Views/Home/DeviceViewInfrared.prefab

@@ -5686,7 +5686,6 @@ GameObject:
   - component: {fileID: 5016398519639811147}
   - component: {fileID: 2108338989013650304}
   - component: {fileID: 8172346654568656097}
-  - component: {fileID: 3584349997327841576}
   m_Layer: 5
   m_Name: omit
   m_TagString: Untagged
@@ -5711,7 +5710,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 500, y: -22.5}
+  m_AnchoredPosition: {x: 472.5, y: -22.5}
   m_SizeDelta: {x: 200, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &2108338989013650304
@@ -5755,22 +5754,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: ...
---- !u!114 &3584349997327841576
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 7830343383463296454}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textKey: Connect_BLE_Connect
-  layoutRebuildObject: {fileID: 0}
-  languageFontSizes: []
+  m_Text: 
 --- !u!1 &7867030853648936596
 GameObject:
   m_ObjectHideFlags: 0
@@ -6061,7 +6045,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
   m_AnchoredPosition: {x: 200, y: -22.5}
-  m_SizeDelta: {x: 400, y: 45}
+  m_SizeDelta: {x: 345, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &2148228175767830763
 CanvasRenderer:
@@ -7530,7 +7514,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
   m_AnchoredPosition: {x: 200, y: -22.5}
-  m_SizeDelta: {x: 400, y: 45}
+  m_SizeDelta: {x: 345, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &49497840751108719
 CanvasRenderer:
@@ -8020,7 +8004,7 @@ MonoBehaviour:
     m_Right: 0
     m_Top: 0
     m_Bottom: 0
-  m_ChildAlignment: 0
+  m_ChildAlignment: 4
   m_Spacing: 0
   m_ChildForceExpandWidth: 0
   m_ChildForceExpandHeight: 0
@@ -8040,7 +8024,6 @@ GameObject:
   - component: {fileID: 6540119674589221142}
   - component: {fileID: 4561199668158207216}
   - component: {fileID: 5895775015745707182}
-  - component: {fileID: 1955914322198322870}
   m_Layer: 5
   m_Name: omit
   m_TagString: Untagged
@@ -8065,7 +8048,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 500, y: -22.5}
+  m_AnchoredPosition: {x: 472.5, y: -22.5}
   m_SizeDelta: {x: 200, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4561199668158207216
@@ -8109,22 +8092,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: ...
---- !u!114 &1955914322198322870
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 9143769868297749396}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  textKey: Connect_BLE_Connect
-  layoutRebuildObject: {fileID: 0}
-  languageFontSizes: []
+  m_Text: 
 --- !u!1 &9222168600980044169
 GameObject:
   m_ObjectHideFlags: 0

+ 30 - 1
Assets/BowArrow/Scripts/Bluetooth/BluetoothAim.cs

@@ -86,6 +86,9 @@ public class BluetoothAim : MonoBehaviour
     public bool NeedDecryption = false;
 
     public BluetoothWindows firstBluetoothWindows { get; set; }
+
+    //首页初始化时候调用一次连接
+    public bool bStartConnect = false;
     void Start()
     {
         ins = this;
@@ -106,6 +109,7 @@ public class BluetoothAim : MonoBehaviour
             BleWinHelper.RegisterTo(gameObject, firstBluetoothWindows,"1P");
         }
 #endif
+     
     }
 
     void OnDestroy()
@@ -115,6 +119,31 @@ public class BluetoothAim : MonoBehaviour
         DisconnectSmartBowHelper2P();
     }
 
+    /// <summary>
+    /// 首页初始化的时候,如果是第一次。尝试连接蓝牙。只进行一次
+    /// </summary>
+    public void HomeViewConnectBLE() {
+        if (bStartConnect) return;
+        bStartConnect = true;
+        //当已经连接过一把弓(1P)时,下一次打开 APP,1P 就自动处于连接的状态;用户只要打1.开 APP 和打开模块就可以自动连接,减少连接设备的操作。
+        Debug.Log("[初始化自动连接蓝牙] 自动开始连接上一次连接的设备 1P?");
+        AimHandler.ins.OnGetAimDeviceInfos();
+        if (AimHandler.ins.aimDeviceInfos.arry.Count != 0) {
+            //如果需要连接
+            if (status != BluetoothStatusEnum.ConnectSuccess)
+            {
+                //setBLEPlayer(BluetoothPlayer.FIRST_PLAYER);
+                Debug.Log("[初始化自动连接蓝牙] 当前选择的操作用户:" + getBLEPlayer());
+                //AimHandler.ins.SetAimDeviceSelectIndex(0);
+                //第一次进入从存储的资料获取 aimDeviceInfo
+                AimHandler.ins.onCreateAimDeviceInfoById();
+
+                DoConnect();
+            }
+        }
+
+    }
+
     private bool userDoConnect = false;
     private bool doConnect = false;
     public Func<bool> action_DoConnectInterceptor;
@@ -1054,7 +1083,7 @@ public class BluetoothAim : MonoBehaviour
         Debug.Log("DoConnect2P");
         if (smartBowHelper2P == null || smartBowHelper2P.GetBluetoothStatus() == SmartBowSDK.BluetoothStatusEnum.None)
         {
-            connectCanceled = false;
+            //connectCanceled = false;
             userDoConnect2P = true;
             doConnect2P = true;
             bNoNeedToReconnect = true;

+ 13 - 7
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json

@@ -411,7 +411,7 @@
   "Add_2P": "增加 2P",
   "Device_Switch": "切换设备",
   "Connect_Tip": "请先连接设备。",
-
+  "Connect_Tip_Infrared": "请先连接红外设备再进行屏幕定位。",
   /**
   ConnectGuidanceView 页面
   **/
@@ -554,7 +554,7 @@
   "TitleTip1": "调整激光定位器的角度和位置,\n使整个电视屏幕完整地位于梯形框内",
   "TitleTipHasData": "如定位白框与电视屏幕位置一致,可点击“确认”按键,跳过定位流程;否则调整激光定位器的角度和位置,使整个电视屏幕完整的位于梯形框内,点击“自动定位”按键",
   "TitleTip2": "如自动识别不准确,可调整激光定位器或调整图像对比度,使屏幕\n边缘更清晰后,再次自动识别;\n如多次自动识别不成功,可点击手动功能,并用手指拖动定位区域\n四个角进行调整,点击确认进入下一步。",
-  "TitleTipManual": "用手动拖动白色线条框来标记出电视屏幕的显示区域",
+  "TitleTipManual": "通过手指点击拖动白框四个角进行调整,使白框与电视屏幕显示区域位置一致后,点击“完成”按键",
   "Withdrawal": "撤销",
   "Automatic": "自动",
   "Manual": "手动",
@@ -562,6 +562,10 @@
   "Confirm": "确认",
   "Finish": "完成",
   "Reset": "重置",
+  "ReAutoPositioning": "重新自动定位",
+  "ReScreenMarking": "重新屏幕标记",
+  "ReManualSetup": "重新手动设置",
+
   "EnterMarker": "进入屏幕标记",
   "Marker": "屏幕标记",
   "TitleTipMarker": "使用{0}的红外激光瞄准屏幕的四个角,\n并单击准心键确认标记。待四个角都标记完成后,点击完成进入下一步",
@@ -581,7 +585,7 @@
   "TipLightCtrl": "操作设备对准电视,将瞄准器的红外光点位于梯形框内的电视屏幕,红色十字会在光点上,并随光点移动;如没有,需要找出干扰光源关闭它或调小亮度和对比度",
 
 
-  "ScreenPositioningSuccessful-title": "\u3000\u3000请用手指点击选择最合适的屏幕区域结果。如未发现明显差异,请任选其一。如识别到的屏幕区域不合适,请点击“返回”重新识别。",
+  "ScreenPositioningSuccessful-title": "\u3000\u3000请用手指点击选择最合适的屏幕区域结果。如未发现明显差异,请任选其一。如识别到的屏幕区域不合适,请返回到相应界面进行重新识别。",
   "FirstResult": "结果一",
   "SecondResult": "结果二",
   "FirstLineTip": "AI智能识别屏幕区域的结果",
@@ -591,12 +595,14 @@
   /**
    红外连接后游戏射击页面
   **/
-  "TopTip_CrossHair": "单击模块上的 <sprite=0> 按键,这是进入准心调整界面的开/关,\n请单击两次(间隔一秒)。",
-  "TopTip_CrossHairPro": "单击设备上的按键 <sprite=0>,进入准心调整界面的开/关,\n请单击两次(间隔一秒)。",
+  "TopTip_CrossHair": "单击设备上的按键 <sprite=0>,进入准心调整界面的开/关,\n请单击两次(间隔一秒)。",
+  "TopTip_CrossHairPro": "单击设备上的按键,进入准心调整界面的开/关,\n请单击两次(间隔一秒)。",
   "TopTip_CrossHairGunPro": "取出弹夹模块,单击其上的按键,这是进入准心\n调整界面的开/关,请单击两次(间隔一秒)。",
-  "TopTip_ARTEMISPro": " 双击设备上的按键,之后用正常的拉弓姿势,\n以箭筒头部瞄准靶心,10秒后准心会移动到靶心,完成准心校准。",
+  
+  "TopTip_ARTEMISPro": "双击设备上的按键,之后用正常的拉弓姿势,\n以箭筒头部瞄准靶心,{0}秒后准心会移动到靶心,完成准心校准。",
   "TopTip_GunPro": "取出弹夹模块,双击其上的按键进行准心校准,快速装回弹夹后,\n用三点一线的射击姿势瞄准靶心,{0}秒后准心会移动到靶心,完成准心校准。",
-  "TopTip": " 长按设备上的按键 <sprite=0>,之后用正常的拉弓姿势,以箭筒头部瞄准靶心,10秒后准心会移动到靶心,完成准心校准。",
+  "TopTip": "长按设备上的按键 <sprite=0>,之后用正常的拉弓姿势,\n以箭筒头部瞄准靶心,{0}秒后准心会移动到靶心,完成准心校准。",
+  
   "TopTip2": "准心已校准,请射中靶子后,自动退出界面。",
   "LeftTitle": "异常问题检测",
   "LeftTip": "1、如发现光标不顺滑,或光标的移动范围不够大,请调整图像亮度或重新进行屏幕定位。\n\n2、如发现光标移动时有延时的现象,请调整分辨率或更换性能更好的手机后,再重新进行测试。\n\n3、如发现光标会随机闪烁不同的位置,或无法移动时,请点击环境测光寻找干扰源,并屏蔽干扰源。",

+ 13 - 7
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json

@@ -459,6 +459,7 @@
   "Add_2P": "Add 2P",
   "Device_Switch": "Switch Device",
   "Connect_Tip": "Please connect the device first.",
+  "Connect_Tip_Infrared": "Please connect the infrared device before proceeding with screen positioning.",
   /**
   ConnectGuidanceView 页面
   **/
@@ -603,7 +604,7 @@
   "TitleTip1": "Adjust the angle and position of the laser locator,so that the \nentire TV screen fits completely within the trapezoidal frame.",
   "TitleTipHasData": "If the positioned white frame matches the TV screen's position, click the 'Confirm' button to skip the positioning process. Otherwise, adjust the angle and position of the laser locator so that the entire TV screen is fully within the trapezoidal frame, then click the 'Auto Positioning' button.",
   "TitleTip2": "If the automatic recognition is not accurate, you can adjust the laser locator or adjust the \nimage contrast to make the screen edge clearer and then automatically recognize it again; \n If automatic recognition fails multiple times, click the manual function and drag the four \ncorners of the positioning area with your finger to adjust. Click OK to proceed to the next step. ",
-  "TitleTipManual": "Manually drag the white line frame to mark the display area of the TV screen.",
+  "TitleTipManual": "Use your finger to drag and adjust the four corners of the white frame. Once the white frame aligns with the TV screen's display area, click the 'Finish' button.",
   "Withdrawal": "Revoke",
   "Automatic": "Automatic",
   "Manual": "Manual",
@@ -611,6 +612,10 @@
   "Confirm": "Confirm",
   "Finish": "Finish",
   "Reset": "Reset",
+  "ReAutoPositioning": "Re-Auto Positioning",
+  "ReScreenMarking": "Re-Screen Marking",
+  "ReManualSetup": "Re-Manual Setup",
+
   "EnterMarker": "Enter Screen Marker",
   "Marker": "Screen Marking",
   "TitleTipMarker": "Aim the infrared laser of {0} at the four corners of the screen, \nand click the reticle button to confirm each mark. Once all four corners are marked, click 'Finish' to proceed to the next step.",
@@ -629,7 +634,7 @@
   "TipAutoEnd": "① If the screen cannot be detected, eliminate any ambient light interference and click the 'Auto Positioning' button to retry detection.\n② If the white frame matches the TV screen's display area, click the 'Confirm' button to skip the positioning process.\n③ If the white frame does not match the TV screen's display area, click the 'Ambient Light Measurement' button to continue the positioning process.",
   "TipLightCtrl": "Position the device facing the TV and ensure the infrared light dot from the aiming device is within the TV screen inside the trapezoidal frame. A red cross should appear on the light dot and move with it. If not, identify and eliminate any interfering light sources or reduce the brightness and contrast.",
 
-  "ScreenPositioningSuccessful-title": "\u3000\u3000Please tap with your finger to select the most suitable screen region result. If no obvious difference is found, choose any one. If the identified screen region is not suitable, click 'Back' to re-recognize.",
+  "ScreenPositioningSuccessful-title": "\u3000\u3000Please use your finger to select the most suitable screen area result. If no significant difference is found, choose any one. If the detected screen area is not suitable, return to the corresponding interface for re-detection.",
   "FirstResult": "First Result",
   "SecondResult": "Second Result",
   "FirstLineTip": "AI intelligently recognizes the results of screen regions",
@@ -639,13 +644,14 @@
   /**
    红外连接后游戏射击页面
   **/
-  "TopTip_CrossHair": "Click the <sprite=0> button on the module to enter the center adjustment \n interface. Please click twice (with an interval of one second)",
-  "TopTip_CrossHairPro": "Click the button on the device <sprite=0> to toggle the crosshair adjustment interface on/off. Please click twice with a one-second interval.",
+  "TopTip_CrossHair": "Click the button on the device <sprite=0> to toggle the crosshair adjustment interface on/off. Please click twice with a one-second interval.",
+  "TopTip_CrossHairPro": "Click the button on the device to toggle the crosshair adjustment interface on/off. Please click twice with a one-second interval.",
   "TopTip_CrossHairGunPro": "Remove the magazine module and click the button on it. This is the on/off button to enter the alignment adjustment interface. Please click twice (with an interval of one second)",
-  "TopTip_ARTEMISPro": "Double-click the button on the device, then assume a normal bow-drawing posture. Aim the arrowhead at the target center, and after 10 seconds, the crosshair will move to the target center, completing the crosshair calibration.",
+  
+  "TopTip_ARTEMISPro": "Double-click the button on the device, then assume a normal bow-drawing posture. Aim the arrowhead at the target center, and after {0} seconds, the crosshair will move to the target center, completing the crosshair calibration.",
   "TopTip_GunPro": "Remove the magazine module and double-click the button on it to calibrate the crosshair. Quickly reinsert the magazine, then aim at the target center using a three-point shooting posture. After {0} seconds, the crosshair will move to the target center, completing the crosshair calibration.",
-  "TopTip": "Press and hold the button on the device <sprite=0>, then assume a normal bow-drawing posture. Aim the arrowhead at the target center, and after 10 seconds, the crosshair will move to the target center, completing the crosshair calibration.",
-
+  "TopTip": "Press and hold the button on the device <sprite=0>, then assume a normal bow-drawing posture. Aim the arrowhead at the target center, and after {0} seconds, the crosshair will move to the target center, completing the crosshair calibration.",
+  
   "TopTip2": "Accurate heart calibration, please hit the target and automatically exit the interface.",
   "LeftTitle": "Abnormal Problem Detection",
   "LeftTip": "1、If the cursor is not smooth or its movement range is insufficient, please adjust the image brightness or reposition the screen.\n\n2、If you notice a delay when the cursor moves, try adjusting the resolution or switching to a higher-performance phone, then retest.\n\n3、If the cursor randomly flickers to different positions or cannot move, please click on ambient light measurement to locate the interference source and block it.",

+ 10 - 2
Assets/BowArrow/Scripts/View/Home/DeviceViewInfrared.cs

@@ -293,8 +293,16 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
                 case 0:
                     if (selectDeviceViewItem.getBLEConnectState())
                     {
-                        //进入屏幕定位
-                        ViewManager2.ShowView(ViewManager2.Path_InfraredView);
+                        if (BluetoothAim.ins.isMainConnectToInfraredDevice() || BluetoothAim.ins.isMainConnectToGun())
+                        {
+                            //进入屏幕定位
+                            ViewManager2.ShowView(ViewManager2.Path_InfraredView);
+                        }
+                        else {
+                            //只有红外设备才能进行屏幕识别
+                            PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("Connect_Tip_Infrared"));
+                        }
+                      
                     }
                     else {
                         PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("Connect_Tip"));

+ 9 - 6
Assets/BowArrow/Scripts/View/Home/DeviceView_ItemShow.cs

@@ -496,17 +496,20 @@ public class DeviceView_ItemShow : MonoBehaviour
             //断开连接
             if (bluetoothPlayer == BluetoothPlayer.FIRST_PLAYER)
             {
-                if (BluetoothAim.ins && BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
-                    BluetoothAim.ins.DoConnect();
+                if (BluetoothAim.ins) { 
+                  if(BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
+                        BluetoothAim.ins.DoConnect();
+                  else BluetoothAim.ins.connectCanceled = true; // 退出自动连接,即时正在连接
+                }
             }
             else
             {
-            if (BluetoothAim.ins && BluetoothAim.ins.getSmartBowHelper2P().GetBluetoothStatus() == SmartBowSDK.BluetoothStatusEnum.Connected) {
+                if (BluetoothAim.ins && BluetoothAim.ins.getSmartBowHelper2P().GetBluetoothStatus() == SmartBowSDK.BluetoothStatusEnum.Connected) {
 
-                BluetoothAim.ins.bNoNeedToReconnect = false;
+                    BluetoothAim.ins.bNoNeedToReconnect = false;
 
-                BluetoothAim.ins.DoConnect2P();
-            }
+                    BluetoothAim.ins.DoConnect2P();
+                }
             }
         
     }

+ 5 - 1
Assets/BowArrow/Scripts/View/Home/HomeView.cs

@@ -192,7 +192,7 @@ public class HomeView : JCUnityLib.ViewBase
         }
 
     }
-    void Start()
+    IEnumerator Start()
     {
         ins = this;
 
@@ -231,6 +231,10 @@ public class HomeView : JCUnityLib.ViewBase
         }
 
         //StartCoroutine(testTip());
+
+        yield return new WaitForSeconds(1.0f);
+        //进行一次蓝牙连接
+        BluetoothAim.ins.HomeViewConnectBLE();
     }
 
     IEnumerator testTip() {

BIN
Assets/InfraredProject/WebCamera/Image/crosshair4.png


+ 123 - 0
Assets/InfraredProject/WebCamera/Image/crosshair4.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 98ec0f05c7042a741b730f25ef36fed9
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 12
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 0
+    wrapV: 0
+    wrapW: 0
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 6 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -853,6 +853,11 @@ public partial class ScreenLocate : MonoBehaviour
             mUVCCameraInfo.SetSize(webCam.webCamTexture.width, webCam.webCamTexture.height);
         }
 
+        if (screenIdentification.QuadAuto == null)
+        {
+            InfraredCameraHelper?.InvokeOnUVCPosUpdate(new List<Vector2>());
+            Debug.LogError("[ScreenLocate] OnLocateScreenEnd  屏幕未识别");
+        }
     }
 
     /**
@@ -876,6 +881,7 @@ public partial class ScreenLocate : MonoBehaviour
         Debug.Log($"[ScreenLocate] 开始修改分辨率 mUVCCameraInfo origin:[{mUVCCameraInfo.CurrentWidth},{mUVCCameraInfo.CurrentHeight}]=>target:[{width},{height}]");
 
         // if (screenIdentification.isInitLocateScreen()) screenIdentification.bStartLocateScreen = true;
+
     }
 
     /// <summary>

+ 583 - 25
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredScreenPositioningView.prefab

@@ -2646,7 +2646,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 1
     m_LineSpacing: 1.2
-  m_Text: "\u8BF7\u7528\u624B\u6307\u70B9\u51FB\u9009\u62E9\u6700\u5408\u9002\u7684\u5C4F\u5E55\u533A\u57DF\u7ED3\u679C\u3002\u5982\u672A\u53D1\u73B0\u660E\u663E\u5DEE\u5F02\uFF0C\u8BF7\u4EFB\u9009\u5176\u4E00\u3002\u5982\u8BC6\u522B\u5230\u7684\u5C4F\u5E55\u533A\u57DF\u4E0D\u5408\u9002\uFF0C\u8BF7\u70B9\u51FB\u8FD4\u56DE\u91CD\u65B0\u8BC6\u522B\u3002"
+  m_Text: "\u8BF7\u7528\u624B\u6307\u70B9\u51FB\u9009\u62E9\u6700\u5408\u9002\u7684\u5C4F\u5E55\u533A\u57DF\u7ED3\u679C\u3002\u5982\u672A\u53D1\u73B0\u660E\u663E\u5DEE\u5F02\uFF0C\u8BF7\u4EFB\u9009\u5176\u4E00\u3002\u5982\u8BC6\u522B\u5230\u7684\u5C4F\u5E55\u533A\u57DF\u4E0D\u5408\u9002\uFF0C\u8BF7\u8FD4\u56DE\u5230\u76F8\u5E94\u754C\u9762\u8FDB\u884C\u91CD\u65B0\u8BC6\u522B\u3002"
 --- !u!114 &5730498274663324036
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -2951,6 +2951,7 @@ MonoBehaviour:
   BottomAutoBtn: {fileID: 5559975924711964121}
   BottomConfirmBtn: {fileID: 3702552092599838165}
   LayoutAutoEnd: {fileID: 264195977536334739}
+  AutoEndConfirmBtn: {fileID: 994305514425658195}
   LayoutLightCtrl: {fileID: 6619217424693250322}
   sliderContrast: {fileID: 445937460444285362}
   sliderBrightness: {fileID: 236129132674385549}
@@ -2964,6 +2965,7 @@ MonoBehaviour:
   - {fileID: 6408912878504262484}
   - {fileID: 5021674450777278830}
   markerPointsLine: {fileID: 2894555110740189758}
+  pointMarker: {fileID: 3538024524113724305}
   LayoutManual: {fileID: 197752899219209777}
   LayoutSuccessful: {fileID: 1975716043050077061}
   ResultLines:
@@ -3448,7 +3450,7 @@ RectTransform:
   m_Children:
   - {fileID: 6748683243200795169}
   - {fileID: 6998064781902507145}
-  - {fileID: 6543783455077679151}
+  - {fileID: 5397309867435705204}
   m_Father: {fileID: 9009683153855149380}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -4549,12 +4551,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 3668741397195680664}
   - {fileID: 1549264120419357878}
   - {fileID: 6533735888451191301}
   - {fileID: 6657211966884884387}
   - {fileID: 6299879027972027070}
   - {fileID: 864528977367079723}
+  - {fileID: 3668741397195680664}
   - {fileID: 2103593680085800770}
   m_Father: {fileID: 518485857765021418}
   m_RootOrder: 9
@@ -6248,7 +6250,7 @@ RectTransform:
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 100, y: 100}
+  m_SizeDelta: {x: 80, y: 80}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3731616553734393203
 CanvasRenderer:
@@ -6278,7 +6280,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Texture: {fileID: 2800000, guid: 88d562c7ed3bd1146891247666750802, type: 3}
+  m_Texture: {fileID: 2800000, guid: 98ec0f05c7042a741b730f25ef36fed9, type: 3}
   m_UVRect:
     serializedVersion: 2
     x: 0
@@ -6903,7 +6905,7 @@ RectTransform:
   - {fileID: 7732219374262333976}
   - {fileID: 8144355702645921395}
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 4
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -7320,7 +7322,7 @@ RectTransform:
   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_SizeDelta: {x: 20, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &6896599606762952499
 CanvasRenderer:
@@ -7350,7 +7352,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: e49f5f7319cc1c14aa7b815786b5f70a, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 96f7d42ed1b01ae4a9c45ffddbe5cf81, type: 3}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -7877,7 +7879,7 @@ GameObject:
   - component: {fileID: 446935287328769815}
   - component: {fileID: 5781673926969706519}
   m_Layer: 5
-  m_Name: ReturnButton
+  m_Name: ReturnLayoutStart
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
@@ -7896,12 +7898,12 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 8023023933181363791}
-  m_Father: {fileID: 142083084347775565}
-  m_RootOrder: 2
+  m_Father: {fileID: 5397309867435705204}
+  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 1266, y: -1041.5}
+  m_AnchoredPosition: {x: 387.5, y: -80}
   m_SizeDelta: {x: 500, y: 160}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &8617398841395357112
@@ -8000,7 +8002,7 @@ MonoBehaviour:
         m_CallState: 2
       - m_Target: {fileID: 1598515592738749058}
         m_TargetAssemblyTypeName: InfraredScreenPositioningView, Assembly-CSharp
-        m_MethodName: OnClick_BackByScreenPositioningStep
+        m_MethodName: OnClick_BackLayoutStart
         m_Mode: 1
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -9740,7 +9742,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 1
     m_LineSpacing: 1.2
-  m_Text: "\u7528\u624B\u52A8\u62D6\u52A8\u767D\u8272\u7EBF\u6761\u6846\u6765\u6807\u8BB0\u51FA\u7535\u89C6\u5C4F\u5E55\u7684\u663E\u793A\u533A\u57DF"
+  m_Text: "\u901A\u8FC7\u624B\u6307\u70B9\u51FB\u62D6\u52A8\u767D\u6846\u56DB\u4E2A\u89D2\u8FDB\u884C\u8C03\u6574\uFF0C\u4F7F\u767D\u6846\u4E0E\u7535\u89C6\u5C4F\u5E55\u663E\u793A\u533A\u57DF\u4F4D\u7F6E\u4E00\u81F4\u540E\uFF0C\u70B9\u51FB\u201C\u5B8C\u6210\u201D\u6309\u952E"
 --- !u!114 &8354500678973876830
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -11473,7 +11475,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: "\u8FD4\u56DE"
+  m_Text: "\u91CD\u65B0\u81EA\u52A8\u5B9A\u4F4D"
 --- !u!114 &4383102924832982100
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -11486,11 +11488,11 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  textKey: common_return
+  textKey: ReAutoPositioning
   layoutRebuildObject: {fileID: 0}
   languageFontSizes:
   - language: 1
-    fontSize: 50
+    fontSize: 45
     lineSpacing: 0
 --- !u!1 &5289662611595121878
 GameObject:
@@ -11962,6 +11964,72 @@ MonoBehaviour:
           m_StringArgument: 
           m_BoolArgument: 0
         m_CallState: 2
+--- !u!1 &5580936728870259712
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5397309867435705204}
+  - component: {fileID: 4166276710137447342}
+  m_Layer: 5
+  m_Name: BottomButtonContainer
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5397309867435705204
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5580936728870259712}
+  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_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6543783455077679151}
+  - {fileID: 2143940806193830504}
+  - {fileID: 5220521605817821041}
+  m_Father: {fileID: 142083084347775565}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 1266, y: -1041.5}
+  m_SizeDelta: {x: 2000, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &4166276710137447342
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5580936728870259712}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 4
+  m_Spacing: 112.5
+  m_ChildForceExpandWidth: 0
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 0
+  m_ChildControlHeight: 0
+  m_ChildScaleWidth: 0
+  m_ChildScaleHeight: 0
+  m_ReverseArrangement: 0
 --- !u!1 &5594035293678205632
 GameObject:
   m_ObjectHideFlags: 0
@@ -12130,7 +12198,7 @@ RectTransform:
   - {fileID: 1091291821683212642}
   - {fileID: 7870703120936269460}
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 5
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 1}
   m_AnchorMax: {x: 0.5, y: 1}
@@ -12919,7 +12987,7 @@ RectTransform:
   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_SizeDelta: {x: 20, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1967376327088178841
 CanvasRenderer:
@@ -12949,7 +13017,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: e49f5f7319cc1c14aa7b815786b5f70a, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 96f7d42ed1b01ae4a9c45ffddbe5cf81, type: 3}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -12993,7 +13061,7 @@ RectTransform:
   - {fileID: 6408912878504262484}
   - {fileID: 5021674450777278830}
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 2
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -13127,7 +13195,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 1
+  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -16387,7 +16455,7 @@ RectTransform:
   - {fileID: 9055993406141210656}
   - {fileID: 4060893055567468929}
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 0
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -16629,7 +16697,7 @@ MonoBehaviour:
       m_Calls:
       - m_Target: {fileID: 1598515592738749058}
         m_TargetAssemblyTypeName: InfraredScreenPositioningView, Assembly-CSharp
-        m_MethodName: onManualToAutomatic
+        m_MethodName: OnClick_EnterAutoByMarker
         m_Mode: 1
         m_Arguments:
           m_ObjectArgument: {fileID: 0}
@@ -16712,6 +16780,152 @@ MonoBehaviour:
     y: 0
     width: 1
     height: 1
+--- !u!1 &7897174640054017809
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5220521605817821041}
+  - component: {fileID: 2270039310466389071}
+  - component: {fileID: 1586171754448119056}
+  - component: {fileID: 1287912644465024033}
+  m_Layer: 5
+  m_Name: ReturnManual
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5220521605817821041
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7897174640054017809}
+  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_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 734055651813447049}
+  m_Father: {fileID: 5397309867435705204}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 1612.5, y: -80}
+  m_SizeDelta: {x: 500, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2270039310466389071
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7897174640054017809}
+  m_CullTransparentMesh: 1
+--- !u!114 &1586171754448119056
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7897174640054017809}
+  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: 0.14509805, g: 0.7490196, b: 0.7490196, 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: 21300000, guid: 3d8675433a508ec47b8f895201eacf20, type: 3}
+  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!114 &1287912644465024033
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7897174640054017809}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    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: 1586171754448119056}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 3538024524113724305}
+        m_TargetAssemblyTypeName: PointMarker, Assembly-CSharp
+        m_MethodName: UndoAllPoints
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+      - m_Target: {fileID: 1598515592738749058}
+        m_TargetAssemblyTypeName: InfraredScreenPositioningView, Assembly-CSharp
+        m_MethodName: OnClick_EnterManual
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
 --- !u!1 &7907918132765395333
 GameObject:
   m_ObjectHideFlags: 0
@@ -17830,13 +18044,112 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 4106188122891562425}
-  m_RootOrder: 3
+  m_RootOrder: 2
   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!1 &8406163092151517355
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 734055651813447049}
+  - component: {fileID: 5920702838198937770}
+  - component: {fileID: 5096288445717392148}
+  - component: {fileID: 701313984057725759}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &734055651813447049
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8406163092151517355}
+  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_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 5220521605817821041}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 500, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5920702838198937770
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8406163092151517355}
+  m_CullTransparentMesh: 0
+--- !u!114 &5096288445717392148
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8406163092151517355}
+  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: 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_FontData:
+    m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
+    m_FontSize: 60
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 78
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: "\u91CD\u65B0\u624B\u52A8\u8BBE\u7F6E"
+--- !u!114 &701313984057725759
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8406163092151517355}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: ReManualSetup
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes:
+  - language: 1
+    fontSize: 45
+    lineSpacing: 0
 --- !u!1 &8409966892056295105
 GameObject:
   m_ObjectHideFlags: 0
@@ -18678,6 +18991,105 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &9016624505330033181
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8931104771177754216}
+  - component: {fileID: 2264931968471497178}
+  - component: {fileID: 8930535187346417812}
+  - component: {fileID: 4454348579911392679}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &8931104771177754216
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9016624505330033181}
+  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_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2143940806193830504}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 500, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2264931968471497178
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9016624505330033181}
+  m_CullTransparentMesh: 0
+--- !u!114 &8930535187346417812
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9016624505330033181}
+  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: 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_FontData:
+    m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
+    m_FontSize: 60
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 78
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: "\u91CD\u65B0\u5C4F\u5E55\u6807\u8BB0"
+--- !u!114 &4454348579911392679
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9016624505330033181}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: ReScreenMarking
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes:
+  - language: 1
+    fontSize: 45
+    lineSpacing: 0
 --- !u!1 &9024089087936724655
 GameObject:
   m_ObjectHideFlags: 0
@@ -18857,6 +19269,152 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: 1
+--- !u!1 &9072827092282959873
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2143940806193830504}
+  - component: {fileID: 7510062062010545217}
+  - component: {fileID: 6695652813205097389}
+  - component: {fileID: 1061613553559913164}
+  m_Layer: 5
+  m_Name: ReturnMarker
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2143940806193830504
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9072827092282959873}
+  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_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8931104771177754216}
+  m_Father: {fileID: 5397309867435705204}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 1000, y: -80}
+  m_SizeDelta: {x: 500, y: 160}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7510062062010545217
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9072827092282959873}
+  m_CullTransparentMesh: 1
+--- !u!114 &6695652813205097389
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9072827092282959873}
+  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: 0.14509805, g: 0.7490196, b: 0.7490196, 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: 21300000, guid: 3d8675433a508ec47b8f895201eacf20, type: 3}
+  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!114 &1061613553559913164
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 9072827092282959873}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    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: 6695652813205097389}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 3538024524113724305}
+        m_TargetAssemblyTypeName: PointMarker, Assembly-CSharp
+        m_MethodName: UndoAllPoints
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+      - m_Target: {fileID: 1598515592738749058}
+        m_TargetAssemblyTypeName: InfraredScreenPositioningView, Assembly-CSharp
+        m_MethodName: OnClick_EnterMarker
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
 --- !u!1 &9103566445456101299
 GameObject:
   m_ObjectHideFlags: 0

+ 59 - 15
Assets/SmartBow/Scripts/Views/InfraredViewParts/InfraredScreenPositioningView.cs

@@ -109,6 +109,7 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
     [Header("AutoEnd Layout Group")]
     [SerializeField]
     GameObject LayoutAutoEnd;
+    [SerializeField] Button AutoEndConfirmBtn;
 
     [Header("LightCtrl Layout Group")]
     [SerializeField]
@@ -130,6 +131,8 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
     List<RectTransform> markerPosList;
     [SerializeField]
     Line markerPointsLine;
+    [SerializeField]
+    PointMarker pointMarker;
 
     [Header("Manual Layout Group")]
     [SerializeField]
@@ -463,6 +466,15 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
                 LayoutAutoEnd.SetActive(true);
                 pointsParent.gameObject.SetActive(false);
                 CurrentUILineGenerator.enabled = true;
+                if (ScreenLocate.quadUnityVectorList.Count == 0)
+                {
+                    AutoEndConfirmBtn.interactable = false;
+                }
+                else
+                {
+                    //存在数据,显示确认按钮
+                    AutoEndConfirmBtn.interactable = true;
+                }
                 break;
             case ScreenPositioningStep.LightCtrl:
                 maskLine.SetDrawMask(false);
@@ -472,6 +484,8 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
                 //setPointsLocation(ScreenLocate.quadUnityVectorList, pointsParent.gameObject, true);
                 break;
             case ScreenPositioningStep.Marker:
+                //显示提示
+                pointMarker.ShowHintImageParent(true);
                 perStepView = ScreenPositioningStep.Marker;
                 bMarkerFinish = false;
                 maskLine.SetDrawMask(true);
@@ -540,14 +554,17 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
     /// </summary>
     public void OnClick_BackLayoutStart()
     {
+        ClearPointsData();
+
+        SetScreenPositioningStepState(ScreenPositioningStep.Start);
+    }
+    void ClearPointsData() {
         //重置中心点0
         infraredDemo.ResetCenterOffset();
         //清除白线数据
         infraredDemo.ResetPositioningData();
         //上面应该清空了 ScreenLocate.Main.ScreenIdentification.QuadAuto
         onClearCurrentUILineGenerator();
-
-        SetScreenPositioningStepState(ScreenPositioningStep.Start);
     }
     /// <summary>
     /// 进入环境光测试
@@ -589,15 +606,26 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
     /// </summary>
     public void OnClick_EnterAuto()
     {
-        Debug.LogError("OnClick_EnterAuto");
+        Debug.Log("*********** OnClick_EnterAuto ************");
         //自动按钮时候进入之前的校准流程
-        //重置偏移量
-        infraredDemo.ResetCenterOffset();
-        infraredDemo.ResetPositioningData();
+        ClearPointsData();
 
         OnClick_Auto();
     }
     /// <summary>
+    /// 进入标记页面自动流程校准操作
+    /// </summary>
+    public void OnClick_EnterAutoByMarker()
+    {
+        Debug.Log("*********** OnClick_EnterAutoByMarker ************");
+        //自动按钮时候进入之前的校准流程
+        ClearPointsData();
+        markerPointsLine.SetLine(new List<Vector2>());
+        //隐藏提示
+        pointMarker.ShowHintImageParent(false);
+        OnClick_Auto();
+    }
+    /// <summary>
     /// 自动识别
     /// </summary>
     public void OnClick_Auto()
@@ -656,10 +684,14 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
         SyncQuadUnityVectorListToPos();
         SetRectanglePoints(linePosConversion(pos1.localPosition, pos2.localPosition, pos3.localPosition, pos4.localPosition));
         SyncQuadUnityVectorListToMarkerPointesPos();
-
+        //显示提示
+        pointMarker.ShowHintImageParent(true);
         if (curStepView == ScreenPositioningStep.Start || curStepView == ScreenPositioningStep.AutoEnd) {
             //如果是开始页面进行自动定位的
-            if(curStepView != ScreenPositioningStep.AutoEnd) SetScreenPositioningStepState(ScreenPositioningStep.AutoEnd);
+            if (curStepView != ScreenPositioningStep.AutoEnd) {
+                SetScreenPositioningStepState(ScreenPositioningStep.AutoEnd);
+                AutoEndConfirmBtn.interactable = true;
+            }
         }
         else if (curStepView == ScreenPositioningStep.Marker || curStepView == ScreenPositioningStep.Manual) {
             //显示最后结果
@@ -929,6 +961,15 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
             ScreenLocate.Main.ScreenQuad.gameObject.SetActive(false);
             ScreenLocate.Main.UILineGenerator.Points = new Vector2[0];
         }
+
+        if (curStepView == ScreenPositioningStep.Start || curStepView == ScreenPositioningStep.AutoEnd)
+        {
+            //如果是开始页面进行自动定位的失败的
+            if (curStepView != ScreenPositioningStep.AutoEnd) {
+                SetScreenPositioningStepState(ScreenPositioningStep.AutoEnd);
+                AutoEndConfirmBtn.interactable = false;
+            }
+        }
     }
     /// <summary>
     /// 标准四个点
@@ -1617,13 +1658,16 @@ public class InfraredScreenPositioningView : JCUnityLib.ViewBase
     /// </summary>
     void SyncQuadUnityVectorListToMarkerPointesPos()
     {
-        Debug.Log("[ScreenLocate] SyncQuadUnityVectorListToMarkerPointesPos quadUnityVectorList:" + ScreenLocate.Main.PrintVector2List(ScreenLocate.quadUnityVectorList));
-        markerPosList[0].anchoredPosition = ScreenLocate.quadUnityVectorList[0].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
-        markerPosList[1].anchoredPosition = ScreenLocate.quadUnityVectorList[1].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
-        markerPosList[2].anchoredPosition = ScreenLocate.quadUnityVectorList[3].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
-        markerPosList[3].anchoredPosition = ScreenLocate.quadUnityVectorList[2].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
-
-        SetMarkerRectanglePoints(linePosConversion(markerPosList[0].localPosition, markerPosList[1].localPosition, markerPosList[2].localPosition, markerPosList[3].localPosition));
+        if (ScreenLocate.quadUnityVectorList.Count == 4) 
+        {
+            Debug.Log("[ScreenLocate] SyncQuadUnityVectorListToMarkerPointesPos quadUnityVectorList:" + ScreenLocate.Main.PrintVector2List(ScreenLocate.quadUnityVectorList));
+            markerPosList[0].anchoredPosition = ScreenLocate.quadUnityVectorList[0].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
+            markerPosList[1].anchoredPosition = ScreenLocate.quadUnityVectorList[1].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
+            markerPosList[2].anchoredPosition = ScreenLocate.quadUnityVectorList[3].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
+            markerPosList[3].anchoredPosition = ScreenLocate.quadUnityVectorList[2].pixelToLocalPosition_AnchorCenter(Vector2.one, canvasRectTransform.rect);
+            SetMarkerRectanglePoints(linePosConversion(markerPosList[0].localPosition, markerPosList[1].localPosition, markerPosList[2].localPosition, markerPosList[3].localPosition));
+        }
+ 
     }
     void SetMarkerRectanglePoints(List<Vector2> screenPositions)
     {

+ 11 - 1
Assets/SmartBow/Scripts/Views/InfraredViewParts/PointMarker.cs

@@ -233,7 +233,17 @@ public class PointMarker : MonoBehaviour
                 hintImages[i].gameObject.SetActive(false);
         }
     }
-
+    /// <summary>
+    /// 如果没有数据时候,可能需要隐藏渲染
+    /// </summary>
+    /// <param name="bShow"></param>
+    public void ShowHintImageParent(bool bShow)
+    {
+        for (int i = 0; i < hintImages.Length; i++)
+        {
+            hintImages[i].transform.parent.gameObject.SetActive(bShow);
+        }
+    }
     void CompletePoint() {
         if (!bComplete) {
             //Debug.Log("未完成");

+ 4 - 3
Assets/SmartBow/SmartBowSDK/BleWinHelper.cs

@@ -14,17 +14,18 @@ namespace SmartBowSDK
     public class BleWinHelper : MonoBehaviour
     {
         public string LogTag = "BleWinHelper-Log: ";
+        public bool bDebug = false;
         private  void Log(string text)
         {
-            Debug.Log(LogTag + text);
+            if (bDebug)Debug.Log(LogTag + text);
         }
         private void Warn(string text)
         {
-            Debug.LogWarning(LogTag + text);
+            if (bDebug)Debug.LogWarning(LogTag + text);
         }
         private  void Error(string text)
         {
-            Debug.Log(LogTag + text);
+            if (bDebug)Debug.Log(LogTag + text);
         }
 
         private string targetDeviceName = "Bbow_20210501 | ARTEMIS Pro";

BIN
Assets/SmartBow/Textures/Guidance/Infrared/selected2.png


+ 123 - 0
Assets/SmartBow/Textures/Guidance/Infrared/selected2.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 96f7d42ed1b01ae4a9c45ffddbe5cf81
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 12
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 0
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است