Эх сурвалжийг харах

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

# Conflicts:
#	Assets/BowArrow/Resources/Textures/GameIcon/Prefabs/Views/Home/HomeView.prefab
slambb 1 жил өмнө
parent
commit
2b81e8a8a7
100 өөрчлөгдсөн 13711 нэмэгдсэн , 1846 устгасан
  1. 0 0
      Assets/BowArrow/Fonts/HarmonyOS_Sans_SC_Regular SDF.asset
  2. 13 4
      Assets/BowArrow/InfraredCamera/InfraredDemo.cs
  3. 9 9
      Assets/BowArrow/InfraredCamera/Resources/InfraredDemo.prefab
  4. 141 34
      Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.cs
  5. 481 202
      Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.prefab
  6. 5 1
      Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider.cs
  7. 21 21
      Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider.prefab
  8. 18 2
      Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider2.cs
  9. 978 78
      Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider2.prefab
  10. 8 8
      Assets/BowArrow/Modules/InfraredGuider/InfraredResolution.prefab
  11. BIN
      Assets/BowArrow/Resources/Audios/be_loaded.mp3
  12. 99 0
      Assets/BowArrow/Resources/Prefabs/Views/AutoResetView.prefab
  13. 211 67
      Assets/BowArrow/Resources/Prefabs/Views/Home/DeviceViewInfrared.prefab
  14. 6 0
      Assets/BowArrow/Resources/Textures/GameIcon/Prefabs/Views/Home/HomeView.prefab
  15. 15 0
      Assets/BowArrow/Scenes/Game.unity
  16. 73 21
      Assets/BowArrow/Scripts/Bluetooth/AimHandler.cs
  17. 4 1
      Assets/BowArrow/Scripts/Bluetooth/BluetoothAim.cs
  18. 1 1
      Assets/BowArrow/Scripts/CommonConfig.cs
  19. 54 12
      Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json
  20. 54 10
      Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json
  21. 37 5
      Assets/BowArrow/Scripts/Expand/AutoResetView.cs
  22. 4 1
      Assets/BowArrow/Scripts/Expand/SB_EventSystem.cs
  23. 3 1
      Assets/BowArrow/Scripts/Game/CrossHair.cs
  24. 21 2
      Assets/BowArrow/Scripts/Game/GameAssistUI.cs
  25. 11 6
      Assets/BowArrow/Scripts/GameMode/TimeLimitGameMode.cs
  26. 19 19
      Assets/BowArrow/Scripts/Manager/TextureMgr.cs
  27. 51 0
      Assets/BowArrow/Scripts/Util/SwitchCrossHair.cs
  28. 11 0
      Assets/BowArrow/Scripts/Util/SwitchCrossHair.cs.meta
  29. 34 11
      Assets/BowArrow/Scripts/View/Home/DeviceViewInfrared.cs
  30. 9 4
      Assets/BowArrow/Scripts/View/Home/DeviceView_ItemShow.cs
  31. 6 4
      Assets/BowArrow/Scripts/View/Home/HomeView_ChallengeOption.cs
  32. 15 0
      Assets/DuckHunter/Scenes/DuckHunter.unity
  33. 16 0
      Assets/FruitMaster/Scenes/FruitMaster.unity
  34. 1 1
      Assets/FruitMaster/Scripts/GamingManager.cs
  35. 260 208
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace01.unity
  36. 1 1
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace01.unity.meta
  37. 202 226
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace02.unity
  38. 1 1
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace02.unity.meta
  39. 202 226
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace03.unity
  40. 1 1
      Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace03.unity.meta
  41. 8 0
      Assets/Game_Hyperspace/NewGameUI/1_slices.meta
  42. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/0.png
  43. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/0.png.meta
  44. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/1.png
  45. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/1.png.meta
  46. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/2.png
  47. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/2.png.meta
  48. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/3.png
  49. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/3.png.meta
  50. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/4.png
  51. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/4.png.meta
  52. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/5.png
  53. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/5.png.meta
  54. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/6.png
  55. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/6.png.meta
  56. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/7.png
  57. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/7.png.meta
  58. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/8.png
  59. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/8.png.meta
  60. BIN
      Assets/Game_Hyperspace/NewGameUI/1_slices/9.png
  61. 123 0
      Assets/Game_Hyperspace/NewGameUI/1_slices/9.png.meta
  62. 8 0
      Assets/Game_Hyperspace/NewUI0904/version1.meta
  63. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-01.png
  64. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-01.png.meta
  65. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-03.png
  66. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-03.png.meta
  67. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-04.png
  68. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-04.png.meta
  69. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-09.png
  70. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-09.png.meta
  71. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-10.png
  72. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-10.png.meta
  73. BIN
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-11.png
  74. 123 0
      Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-11.png.meta
  75. 22 31
      Assets/Game_Hyperspace/Script/GeneratingTarget.cs
  76. 165 37
      Assets/Game_Hyperspace/Script/Move.cs
  77. 3 4
      Assets/Game_Hyperspace/Script/SpineAnimationLoader.cs
  78. 12 11
      Assets/InfraredProject/InfraredCamera/Scripts/ScreenLocate.cs
  79. BIN
      Assets/InfraredProject/WebCamera/Image/crosshair3.png
  80. 135 0
      Assets/InfraredProject/WebCamera/Image/crosshair3.png.meta
  81. 52 2
      Assets/InfraredProject/WebCamera/Script/ZIM/DebugOnDemo.cs
  82. 9 3
      Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/InfraredSpot/InfraredSpot.cs
  83. 73 67
      Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenIdentification.cs
  84. 4 4
      Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenMap.cs
  85. 48 44
      Assets/InfraredProject/WebCamera/Script/ZIM/Other/QuadrilateralInCamera.cs
  86. 142 62
      Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs
  87. 9 0
      Assets/InfraredProject/WebCamera/Script/ZIM/ZIMUnity/ZIMMath.cs
  88. 8 0
      Assets/InfraredProject/WebCamera/Script/ZIM/ZIMUnity/ZIMWebCamera.cs
  89. 207 31
      Assets/InfraredProject/WebCamera/zimWebCamera.unity
  90. BIN
      Assets/Plugins/Android/libuvccamera.aar
  91. 3 0
      Assets/SmartBow/Resources/Common/BulletManager.prefab
  92. 1 0
      Assets/SmartBow/Resources/Common/BulletManager_Fruit.prefab
  93. 80 2
      Assets/SmartBow/Resources/Common/TipBulletNumber.prefab
  94. 260 6
      Assets/SmartBow/Resources/SmartBow/Prefabs/Views/GameResultView.prefab
  95. 4896 144
      Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredScreenPositioningView.prefab
  96. 1620 195
      Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredView.prefab
  97. 79 2
      Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/CameraMask.prefab
  98. 13 13
      Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/PixelCheaker.cs
  99. 783 0
      Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/SliderSetting.prefab
  100. 7 0
      Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/SliderSetting.prefab.meta

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
Assets/BowArrow/Fonts/HarmonyOS_Sans_SC_Regular SDF.asset


+ 13 - 4
Assets/BowArrow/InfraredCamera/InfraredDemo.cs

@@ -593,8 +593,8 @@ public class InfraredDemo : MonoBehaviour
             //屏幕变化时候
             infraredCameraHelper.OnUVCPosUpdate += (list) =>
             {
-                Debug.Log("OnUVCPosUpdate");
-                 SetLocatePointsToCameraRender(list, 1, 1);
+                Debug.Log("OnUVCPosUpdate list.Count" + list.Count);
+                SetLocatePointsToCameraRender(list, 1, 1);
                 //InfraredScreenPositioningView 页面
                 if (list.Count == 4)
                 {
@@ -1034,6 +1034,15 @@ public class InfraredDemo : MonoBehaviour
     {
         onSliderEvent(value, "PU_CONTRAST", min, max);
     }
+
+    public void onSetSliderCustomBrightnessValue(Slider _slider, float min = 0.0f, float max = 10.0f)
+    {
+        onSetSliderValue(_slider, "PU_BRIGHTNESS", min, max);
+    }
+    public void onSliderCustomBrightnessEvent(float value, float min = 0.0f, float max = 10.0f)
+    {
+        onSliderEvent(value, "PU_BRIGHTNESS", min, max);
+    }
     public void onSetSliderValue(Slider _slider,string typeStr = "PU_CONTRAST", float min = 0.0f, float max = 10.0f)
     {
         if (BluetoothWindows.IsWindows()) {
@@ -1060,8 +1069,8 @@ public class InfraredDemo : MonoBehaviour
             //float v2 = (v / _UVCCtrlInfo.max) * 10;
 
             // 目标区间 [0, 10] 的边界值
-            double targetMin = 0.0;
-            double targetMax = 10.0;
+            double targetMin = min;
+            double targetMax = max;
             double originalMin = _UVCCtrlInfo.min;
             double originalMax = _UVCCtrlInfo.max;
             // 计算转换后的值

+ 9 - 9
Assets/BowArrow/InfraredCamera/Resources/InfraredDemo.prefab

@@ -332,7 +332,7 @@ RectTransform:
   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_ConstrainProportionsScale: 1
   m_Children:
   - {fileID: 2794388562991103856}
   - {fileID: 3819704368344623292}
@@ -342,8 +342,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 337, y: -260}
-  m_SizeDelta: {x: 640, y: 480}
+  m_AnchoredPosition: {x: 379.8, y: -240}
+  m_SizeDelta: {x: 759.6, y: 351}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &384918576708627733
 GameObject:
@@ -7724,8 +7724,8 @@ RectTransform:
   m_GameObject: {fileID: 5322048940444774780}
   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_LocalScale: {x: 1, y: 1, z: 9.999999}
+  m_ConstrainProportionsScale: 1
   m_Children: []
   m_Father: {fileID: 7805299884234116124}
   m_RootOrder: 0
@@ -7763,7 +7763,7 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: f3b60078f3450d1459d9642ca6404c7d, type: 3}
+  m_Sprite: {fileID: 21300000, guid: 1d8b663a5a058554baf08e1080e214f2, type: 3}
   m_Type: 0
   m_PreserveAspect: 0
   m_FillCenter: 1
@@ -9768,7 +9768,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0.000061035156, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &6997909119466549609
@@ -10851,7 +10851,7 @@ RectTransform:
   m_GameObject: {fileID: 7805299884344915711}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.818, y: 0.843, z: 0.5}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 7805299884234116124}
@@ -11758,7 +11758,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: 640, y: 480}
+  m_SizeDelta: {x: 759.6, y: 351}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &5555939350492087454
 CanvasRenderer:

+ 141 - 34
Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.cs

@@ -3,6 +3,17 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
+public enum TipStep { 
+    None = 0,
+    //准心显示和隐藏
+    CrossHairTip = 1,
+    //校准偏移量
+    CalibrationOffset =2,
+    //完成
+    Finish = 3,
+
+
+}
 public class InfraredGuider : MonoBehaviour
 {
     public GameObject infraredLightGuider;
@@ -11,8 +22,15 @@ public class InfraredGuider : MonoBehaviour
     public Button resulutionButton;
 
     public GameObject Title1ARTEMISPro;
+    public GameObject Title1GunPro;
     public GameObject Title1;
     public GameObject Title2;
+    //准心
+    public GameObject TitleCrossHair; //HOUYIPro
+    public GameObject TitleCrossHair2;//ARTEMISProGun
+    public GameObject TitleCrossHairGun;//Gun
+
+    public TipStep mTipStep { get; private set; } = TipStep.None;
 
     public int collisionCount = 0;
     bool bRemove = false;
@@ -28,6 +46,8 @@ public class InfraredGuider : MonoBehaviour
     [Tooltip("异常问题时候文字提示步骤1")]
     public GameObject Step3;
     // Start is called before the first frame update
+
+
     void Start()
     {
         if (InfraredDemo._ins)
@@ -42,24 +62,17 @@ public class InfraredGuider : MonoBehaviour
 #if  UNITY_STANDALONE_WIN || UNITY_EDITOR
         resulutionButton.gameObject.SetActive(false);
 #endif
-        //枪暂时不显示
-        if (BluetoothAim.ins.isMainConnectToGun()) {
-            Title1ARTEMISPro.SetActive(false);
-            Title1.SetActive(false);
-        }
-        else
-        //切换ARTEMISPro
-        if (BluetoothAim.ins.isMainConnectToARTEMISPRO()) {
-            Title1ARTEMISPro.SetActive(true);
-            Title1.SetActive(false);
-        }
+        ////枪暂时不显示
+        //if (BluetoothAim.ins.isMainConnectToGun()) {
+        //    SetTipState(TipStep.None);
+        //}
+        //else
+        ////切换ARTEMISPro
+        //if (BluetoothAim.ins.isMainConnectToARTEMISPRO()) {
+        //    SetTipState(TipStep.CrossHairTip);
+        //}
     }
 
-    // Update is called once per frame
-    //void Update()
-    //{
-
-    //}
 
     public void enterLightView() {
 
@@ -72,27 +85,19 @@ public class InfraredGuider : MonoBehaviour
 #endif
     }
 
-    public void ExitGuider() {
-
-        //if (NewUserGuiderManager.ins)
-        //    NewUserGuiderManager.ins.OnEnd();
 
+    public void ExitGuider() {
         GameAssistUI.ins.onBtnBack();
-
-        //GameMgr.bNavBack = false;
-
-        //Destroy(gameObject);
     }
 
     /// <summary>
-    /// 校准后切换标题
+    /// 校准后到达最后一步射击退出
     /// </summary>
     public void SetTitleAfterCalibration() {
-        Title1ARTEMISPro.SetActive(false);
-        Title1.SetActive(false);
-        Title2.SetActive(true) ;
+        SetTipState(TipStep.Finish);
     }
 
+
     /// <summary>
     /// 进入相机感光度的页面
     /// </summary>
@@ -102,9 +107,99 @@ public class InfraredGuider : MonoBehaviour
         Instantiate(infraredLightGuider2);
 #endif
     }
+    /// <summary>
+    /// 硬件按键按下
+    /// </summary>
+    public void onClickDevice() {
+        //infraredGuider 待检测到用户操作了两次单击按键功能,进入下一步
+        if (mTipStep == TipStep.CrossHairTip)
+        {
+            Button crossHairBtn = GameAssistUI.ins.transform.Find("Button5").GetComponent<Button>();
+            crossHairBtn.onClick.Invoke();
 
+            if (GameMgr.ButtonCount == 1)
+            {
+                GameMgr.ButtonCount = 0;
+                //进入到偏移校准
+                SetTipState(TipStep.CalibrationOffset);
+            }
+            else
+            {
+                GameMgr.ButtonCount++;
+            }
+        }
+
+    }
     /// <summary>
-    /// 异常问题处理时候的文字提示步骤
+    /// 长按或者栓剂触发
+    /// </summary>
+    public void onLongClickDevice()
+    {
+        if (Title1.activeSelf || Title1ARTEMISPro.activeSelf || Title1GunPro.activeSelf || Title2.activeSelf)
+        {
+            AutoResetView.onInfraredGuiderAutoResetView(); 
+        }
+
+    }
+    /// <summary>
+    /// 根据enum操作ui
+    /// </summary>
+    /// <param name="tipStep"></param>
+    public void SetTipState(TipStep tipStep = TipStep.None) {
+
+        mTipStep = tipStep;
+        switch (tipStep)
+        {
+            case TipStep.None://全部隐藏
+                AllTipFalse();
+                break;
+            case TipStep.CrossHairTip:
+                AllTipFalse();
+                if (BluetoothAim.ins.isMainConnectToHOUYIPRO())
+                {
+                    TitleCrossHair.SetActive(true);
+                }
+                else if (BluetoothAim.ins.isMainConnectToARTEMISPRO())
+                {
+                    TitleCrossHair2.SetActive(true);
+                } else if (BluetoothAim.ins.isMainConnectToGun()) {
+
+                    TitleCrossHairGun.SetActive(true);
+                }
+                break;
+            case TipStep.CalibrationOffset:
+                AllTipFalse();
+                //按照连接的类型来区分
+                if (BluetoothAim.ins.isMainConnectToHOUYIPRO())
+                {
+                    Title1.SetActive(true);
+                }
+                else if (BluetoothAim.ins.isMainConnectToARTEMISPRO())
+                {
+                    Title1ARTEMISPro.SetActive(true);
+                }else if (BluetoothAim.ins.isMainConnectToGun())
+                {
+                    Title1GunPro.SetActive(true);
+                }
+                break;
+            case TipStep.Finish:
+                AllTipFalse();
+                Title2.SetActive(true);
+                break;
+        }
+    }
+    void AllTipFalse() {
+        TitleCrossHair.SetActive(false);
+        TitleCrossHair2.SetActive(false);
+        TitleCrossHairGun.SetActive(false);
+        Title1.SetActive(false);
+        Title2.SetActive(false);
+        Title1ARTEMISPro.SetActive(false);
+        Title1GunPro.SetActive(false);
+    }
+
+    /// <summary>
+    /// 异常问题处理时候的文字提示步骤页面
     /// </summary>
     public void OnStep3TextTip()
     {
@@ -117,10 +212,12 @@ public class InfraredGuider : MonoBehaviour
         Step1.SetActive(false);
         Step2.SetActive(false);
         Step3.SetActive(true);
+
+        SetTipState(TipStep.CrossHairTip);
     }
 
     /// <summary>
-    /// 射击页面测试显示
+    /// 检测四个角跳转到准心开关界面
     /// </summary>
     public void OnStep2ShootTest()
     {
@@ -135,7 +232,8 @@ public class InfraredGuider : MonoBehaviour
         Step2.SetActive(true);
         Step3.SetActive(false);
 
-    
+
+        SetTipState(TipStep.CrossHairTip);
     }
     IEnumerator delaySet() {
   
@@ -161,8 +259,17 @@ public class InfraredGuider : MonoBehaviour
 
     }
 
-    void OnDisable()
-    {
+    //void OnDisable()
+    //{
        
-    }
+    //}
+
+    //private void Update()
+    //{
+    //    if (Input.GetKeyDown(KeyCode.Alpha5))
+    //    {
+
+    //        onLongClickDevice();
+    //    }
+    //}
 }

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 481 - 202
Assets/BowArrow/Modules/InfraredGuider/InfraredGuider.prefab


+ 5 - 1
Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider.cs

@@ -7,7 +7,7 @@ using ZIM;
 using ZIM.Unity;
 
 //处理光源检测部分
-public class InfraredLightGuider2 : MonoBehaviour
+public class InfraredLightGuider : MonoBehaviour
 {
     [SerializeField]
     RawImage rawImage;
@@ -30,6 +30,10 @@ public class InfraredLightGuider2 : MonoBehaviour
 
             SetLocatePointsToCameraRender(ScreenLocate.quadUnityVectorList,1,1);
         }
+        //这里为了修改背景摄像机显示
+        Color currentColor = rawImage.color;
+        currentColor.a = Mathf.Clamp01(1);  // Clamp the alpha between 0 and 1
+        rawImage.color = currentColor;
     }
 
     void Update()

+ 21 - 21
Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider.prefab

@@ -61,7 +61,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Color: {r: 1, g: 1, b: 1, a: 0}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -108,8 +108,8 @@ RectTransform:
   m_Father: {fileID: 3983491469643240657}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 60}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -275,9 +275,9 @@ RectTransform:
   m_Father: {fileID: 7640314608402094272}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: -21.484999, y: -319.08}
   m_SizeDelta: {x: 13.91, y: 20.44}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &993893367609835643
@@ -538,9 +538,9 @@ RectTransform:
   m_Father: {fileID: 7640314608402094272}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: -21.484999, y: -627.76}
   m_SizeDelta: {x: 26.77, y: 20.8}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &805121927224157775
@@ -723,18 +723,18 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 30
+    m_FontSize: 50
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 3
-    m_MaxSize: 40
+    m_MaxSize: 50
     m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u5C04\u51FB\u6D4B\u8BD5"
+  m_Text: "\u8FD4\u56DE"
 --- !u!114 &6524852190838108507
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -747,7 +747,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  textKey: ShootingTest
+  textKey: common_return
   layoutRebuildObject: {fileID: 0}
   languageFontSizes: []
 --- !u!1 &3835120308163295946
@@ -888,7 +888,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &5017439069372811040
 RectTransform:
   m_ObjectHideFlags: 0
@@ -1441,7 +1441,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: "\u4FDD\u6301\u753B\u9762\u91CC\u7684\u5C4F\u5E55\u6CA1\u6709\u767D\u8272\u5149\u6591\uFF0C\u5982\u679C\u6709\u5149\u6591\uFF0C\u9700\u8981\u627E\u51FA\u5E72\u6270\u5149\u6E90\u5173\u95ED\u5B83\n\u6216\u8C03\u6574\u6444\u50CF\u5934\u652F\u67B6\u4F4D\u7F6E\u4EE5\u5C4F\u853D\u5B83\u3002"
+  m_Text: "\u4FDD\u6301\u753B\u9762\u91CC\u7684\u5C4F\u5E55\u6CA1\u6709\u767D\u8272\u5149\u6591\uFF0C\u5982\u679C\u6709\u5149\u6591\uFF0C\u9700\u8981\u627E\u51FA\u5E72\u6270\u5149\u6E90\u5173\u95ED\u5B83\u6216\u8C03\u6574\u6FC0\u5149\u5B9A\u4F4D\u5668\u4F4D\u7F6E\u4EE5\u5C4F\u853D\u5B83\u3002"
 --- !u!114 &1494863647824932
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -1490,9 +1490,9 @@ RectTransform:
   m_Father: {fileID: 7640314608402094272}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: -21.485, y: -10.4}
   m_SizeDelta: {x: 14.51, y: 20.8}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &9199887153843563520
@@ -1679,8 +1679,8 @@ RectTransform:
   m_Father: {fileID: 6957671335679250492}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 10}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -1870,7 +1870,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 184, y: 94.6}
+  m_SizeDelta: {x: 300, y: 94.6}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &5172983043921543757
 CanvasRenderer:

+ 18 - 2
Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider2.cs

@@ -7,13 +7,16 @@ using ZIM;
 using ZIM.Unity;
 
 //处理光源检测部分
-public class InfraredLightGuider : MonoBehaviour
+public class InfraredLightGuider2 : MonoBehaviour
 {
     [SerializeField]
     RawImage rawImage;
     //相机感光部分
     [SerializeField]
     Slider slider;
+    //亮度
+    [SerializeField]
+    Slider sliderBrightness;
 
     [SerializeField] List<RectTransform> _crosshairsInCamera;
 
@@ -22,14 +25,27 @@ public class InfraredLightGuider : MonoBehaviour
     {
         if (InfraredDemo._ins)
         {
+            //对比度
             slider.onValueChanged.AddListener((value) =>
             {
                 InfraredDemo._ins.onSliderCustomEvent(value,-20.0f,20.0f);
             });
-            InfraredDemo._ins.onSetSliderCustomValue(slider,- 20.0f, 20.0f);
+            InfraredDemo._ins.onSetSliderCustomValue(slider,-20.0f, 20.0f);
+
+            //亮度
+            sliderBrightness.onValueChanged.AddListener((value) =>
+            {
+                InfraredDemo._ins.onSliderCustomBrightnessEvent(value, -20.0f, 20.0f);
+            });
+            InfraredDemo._ins.onSetSliderCustomBrightnessValue(sliderBrightness, -20.0f, 20.0f);
 
             SetLocatePointsToCameraRender(ScreenLocate.quadUnityVectorList,1,1);
         }
+
+
+        Color currentColor = rawImage.color;
+        currentColor.a = Mathf.Clamp01(1);  // Clamp the alpha between 0 and 1
+        rawImage.color = currentColor;
     }
 
     void Update()

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 978 - 78
Assets/BowArrow/Modules/InfraredGuider/InfraredLightGuider2.prefab


+ 8 - 8
Assets/BowArrow/Modules/InfraredGuider/InfraredResolution.prefab

@@ -481,11 +481,11 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 30
+    m_FontSize: 50
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 3
-    m_MaxSize: 40
+    m_MaxSize: 50
     m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
@@ -741,11 +741,11 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 30
+    m_FontSize: 50
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 3
-    m_MaxSize: 40
+    m_MaxSize: 50
     m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
@@ -1119,11 +1119,11 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 45
+    m_FontSize: 70
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 4
-    m_MaxSize: 45
+    m_MaxSize: 70
     m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
@@ -1260,7 +1260,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 184, y: 94.6}
+  m_SizeDelta: {x: 184, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7481836493800468683
 CanvasRenderer:
@@ -1394,7 +1394,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 184, y: 94.6}
+  m_SizeDelta: {x: 184, y: 100}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &5172983043921543757
 CanvasRenderer:

BIN
Assets/BowArrow/Resources/Audios/be_loaded.mp3


+ 99 - 0
Assets/BowArrow/Resources/Prefabs/Views/AutoResetView.prefab

@@ -1,5 +1,101 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &410729350025696783
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6714084997552880040}
+  - component: {fileID: 1902031125379766742}
+  - component: {fileID: 2243730440954972359}
+  - component: {fileID: 8103677087008083281}
+  m_Layer: 5
+  m_Name: Text-Infrared-Gun
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &6714084997552880040
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410729350025696783}
+  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: 4272915218284800337}
+  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: 60, y: -59.692307}
+  m_SizeDelta: {x: 0, y: 39.384613}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &1902031125379766742
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410729350025696783}
+  m_CullTransparentMesh: 1
+--- !u!114 &2243730440954972359
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410729350025696783}
+  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: 0
+  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: 1ad2cf6c2f09744489d8c60b3fe3bab2, type: 3}
+    m_FontSize: 30
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 
+--- !u!114 &8103677087008083281
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 410729350025696783}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: "new-user-guider_tip_\u89C6\u89D2\u5F52\u4F4D-\u7784\u51C6-infrared-gun"
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &1250271963543843501
 GameObject:
   m_ObjectHideFlags: 0
@@ -206,6 +302,7 @@ RectTransform:
   m_Children:
   - {fileID: 1490023618661034890}
   - {fileID: 8982683736172860906}
+  - {fileID: 6714084997552880040}
   m_Father: {fileID: 8541278423340140544}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -504,3 +601,5 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: f9486d1d8655b1c42a3f3d70d5313b3b, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  bInfraredGuider: 0
+  infraredGuiderTime: 10

+ 211 - 67
Assets/BowArrow/Resources/Prefabs/Views/Home/DeviceViewInfrared.prefab

@@ -36,8 +36,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 427.5, y: -14}
-  m_SizeDelta: {x: 285, y: 28}
+  m_AnchoredPosition: {x: 452.5, y: -25}
+  m_SizeDelta: {x: 285, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4327481153495117696
 CanvasRenderer:
@@ -76,8 +76,8 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 8748957870701941239}
   - {fileID: 3319966071402702626}
+  - {fileID: 5368886303976252795}
   m_Father: {fileID: 2624584339530074265}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -104,7 +104,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 4
-  m_Spacing: 40
+  m_Spacing: 30
   m_ChildForceExpandWidth: 0
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 0
@@ -257,6 +257,7 @@ GameObject:
   - component: {fileID: 4124505392989978468}
   - component: {fileID: 3178871609471491117}
   - component: {fileID: 4434995619077324622}
+  - component: {fileID: 7522256270406972882}
   m_Layer: 5
   m_Name: Text
   m_TagString: Untagged
@@ -326,6 +327,21 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: "2P  \u6211\u7684WONDERFITTER \u8BBE\u5907"
+--- !u!114 &7522256270406972882
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 385579827520165080}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_MyDeviceTitle2P
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &497525829943393009
 GameObject:
   m_ObjectHideFlags: 0
@@ -695,8 +711,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
-  m_AnchoredPosition: {x: 70, y: -14.000004}
-  m_SizeDelta: {x: 70, y: 28}
+  m_AnchoredPosition: {x: 75, y: -14.000004}
+  m_SizeDelta: {x: 70, y: 30}
   m_Pivot: {x: 0, y: 0}
 --- !u!222 &9102424749539000145
 CanvasRenderer:
@@ -728,12 +744,12 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
+    m_FontSize: 30
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 2
     m_MaxSize: 40
-    m_Alignment: 3
+    m_Alignment: 0
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 1
@@ -1213,7 +1229,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &3697929722062621677
 RectTransform:
   m_ObjectHideFlags: 0
@@ -1234,9 +1250,9 @@ RectTransform:
   m_Father: {fileID: 4242660785307798858}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: 0, y: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 1006, y: -375}
   m_SizeDelta: {x: 620, y: 750}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &5890894762981375525
@@ -1990,6 +2006,7 @@ GameObject:
   - component: {fileID: 4032015130671786350}
   - component: {fileID: 1573826367756168637}
   - component: {fileID: 2817974586232066848}
+  - component: {fileID: 7976466764508765836}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -2059,6 +2076,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u5C4F\u5E55\u5B9A\u4F4D"
+--- !u!114 &7976466764508765836
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2519187698631005381}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_Btn_Screen
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &2556358481352995298
 GameObject:
   m_ObjectHideFlags: 0
@@ -2499,6 +2531,7 @@ GameObject:
   - component: {fileID: 678598712998616171}
   - component: {fileID: 4459570435422172270}
   - component: {fileID: 4176535467277887792}
+  - component: {fileID: 2627063191067710554}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -2568,6 +2601,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u667A\u80FD\u5F13\u7BAD"
+--- !u!114 &2627063191067710554
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2956249261256406216}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_Btn_Archery
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &3090702339649029404
 GameObject:
   m_ObjectHideFlags: 0
@@ -2655,6 +2703,7 @@ GameObject:
   - component: {fileID: 4424689622087952574}
   - component: {fileID: 5677634002329696620}
   - component: {fileID: 3590390481849422466}
+  - component: {fileID: 537921283078541089}
   m_Layer: 5
   m_Name: Text
   m_TagString: Untagged
@@ -2724,6 +2773,21 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: "1P  \u6211\u7684WONDERFITTER \u8BBE\u5907"
+--- !u!114 &537921283078541089
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3456942862260362482}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_MyDeviceTitle1P
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &3468918820746832752
 GameObject:
   m_ObjectHideFlags: 0
@@ -2833,14 +2897,14 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 5368886303976252795}
+  - {fileID: 8748957870701941239}
   - {fileID: 4235770052945755040}
   m_Father: {fileID: 8809921120636371870}
-  m_RootOrder: 1
+  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: 310, y: -127.5}
+  m_AnchoredPosition: {x: 310, y: -54}
   m_SizeDelta: {x: 570, y: 50}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3819646608067363017
@@ -2899,7 +2963,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 4
-  m_Spacing: 0
+  m_Spacing: 10
   m_ChildForceExpandWidth: 0
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 0
@@ -3648,8 +3712,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 427.5, y: -25}
-  m_SizeDelta: {x: 285, y: 28}
+  m_AnchoredPosition: {x: 452.5, y: -25}
+  m_SizeDelta: {x: 285, y: 30}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4765677205668891988
 CanvasRenderer:
@@ -3728,7 +3792,7 @@ MonoBehaviour:
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
     m_FontSize: 14
-    m_FontStyle: 0
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 10
     m_MaxSize: 40
@@ -3962,7 +4026,7 @@ MonoBehaviour:
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
     m_FontSize: 14
-    m_FontStyle: 0
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 10
     m_MaxSize: 40
@@ -4008,8 +4072,8 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
-  m_AnchoredPosition: {x: 70, y: -14.000004}
-  m_SizeDelta: {x: 70, y: 28}
+  m_AnchoredPosition: {x: 75, y: -14.000004}
+  m_SizeDelta: {x: 70, y: 30}
   m_Pivot: {x: 0, y: 0}
 --- !u!222 &617670098236080175
 CanvasRenderer:
@@ -4041,12 +4105,12 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
+    m_FontSize: 30
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 2
     m_MaxSize: 40
-    m_Alignment: 3
+    m_Alignment: 0
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 1
@@ -5039,6 +5103,7 @@ GameObject:
   - component: {fileID: 4496825468146933954}
   - component: {fileID: 4962358607051297953}
   - component: {fileID: 357045045445746495}
+  - component: {fileID: 3895655750695971699}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -5108,6 +5173,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u65AD\u5F00\u8FDE\u63A5"
+--- !u!114 &3895655750695971699
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7332025093689908053}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Disconnect_Btn
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &7422259073830678695
 GameObject:
   m_ObjectHideFlags: 0
@@ -5139,14 +5219,14 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 5224722728605276788}
+  - {fileID: 4331716192076459625}
   - {fileID: 8505179751994062504}
   m_Father: {fileID: 3115437585392817648}
-  m_RootOrder: 1
+  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: 310, y: -127.5}
+  m_AnchoredPosition: {x: 310, y: -54}
   m_SizeDelta: {x: 570, y: 50}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1043175752115609201
@@ -5204,8 +5284,8 @@ MonoBehaviour:
     m_Right: 0
     m_Top: 0
     m_Bottom: 0
-  m_ChildAlignment: 0
-  m_Spacing: 0
+  m_ChildAlignment: 4
+  m_Spacing: 10
   m_ChildForceExpandWidth: 1
   m_ChildForceExpandHeight: 1
   m_ChildControlWidth: 0
@@ -5224,6 +5304,7 @@ GameObject:
   - component: {fileID: 741292733069802814}
   - component: {fileID: 3503910074354144956}
   - component: {fileID: 3209682440852996174}
+  - component: {fileID: 8295294304785417482}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -5293,6 +5374,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u8FDE\u63A5\u8BBE\u5907"
+--- !u!114 &8295294304785417482
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7556665170582975310}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_Btn
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &7622741427315901751
 GameObject:
   m_ObjectHideFlags: 0
@@ -5322,8 +5418,8 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 4331716192076459625}
   - {fileID: 5756235976269569222}
+  - {fileID: 5224722728605276788}
   m_Father: {fileID: 8359389633136827950}
   m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -5350,7 +5446,7 @@ MonoBehaviour:
     m_Top: 0
     m_Bottom: 0
   m_ChildAlignment: 4
-  m_Spacing: 40
+  m_Spacing: 30
   m_ChildForceExpandWidth: 0
   m_ChildForceExpandHeight: 0
   m_ChildControlWidth: 0
@@ -5523,6 +5619,7 @@ GameObject:
   - component: {fileID: 4556053596195783516}
   - component: {fileID: 6176992172429700426}
   - component: {fileID: 3965712022615949644}
+  - component: {fileID: 6354510550579178731}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -5592,6 +5689,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u5207\u6362\u8BBE\u5907"
+--- !u!114 &6354510550579178731
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7867030853648936596}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Device_Switch
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &7890919721642812243
 GameObject:
   m_ObjectHideFlags: 0
@@ -5775,18 +5887,18 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 8035895859342677344}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  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: 3319966071402702626}
-  m_RootOrder: 0
+  m_Father: {fileID: 8809921120636371870}
+  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: 142.5, y: -25}
-  m_SizeDelta: {x: 285, y: 28}
+  m_AnchoredPosition: {x: 310, y: -131.5}
+  m_SizeDelta: {x: 285, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &2148228175767830763
 CanvasRenderer:
@@ -5818,16 +5930,16 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
+    m_FontSize: 45
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 1
-    m_MaxSize: 40
-    m_Alignment: 5
+    m_MaxSize: 50
+    m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: Connect
 --- !u!114 &4288816417670544630
@@ -5856,6 +5968,7 @@ GameObject:
   - component: {fileID: 1204531698397008728}
   - component: {fileID: 5886681956805817508}
   - component: {fileID: 6329825763615910734}
+  - component: {fileID: 2669265562459831806}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -5925,6 +6038,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u667A\u80FD\u624B\u67AA"
+--- !u!114 &2669265562459831806
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8241605669420897683}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Connect_Btn_Gun
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &8311486230390535680
 GameObject:
   m_ObjectHideFlags: 0
@@ -5955,13 +6083,13 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 3115437585392817648}
+  m_Father: {fileID: 5756235976269569222}
   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: 310, y: -46.5}
-  m_SizeDelta: {x: 570, y: 32}
+  m_AnchoredPosition: {x: 150, y: -25}
+  m_SizeDelta: {x: 300, y: 50}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &1281910840067255634
 CanvasRenderer:
@@ -5997,11 +6125,11 @@ MonoBehaviour:
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 1
-    m_MaxSize: 40
-    m_Alignment: 4
+    m_MaxSize: 50
+    m_Alignment: 5
     m_AlignByGeometry: 0
     m_RichText: 1
-    m_HorizontalOverflow: 0
+    m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: HOUYU 1
@@ -6264,6 +6392,7 @@ GameObject:
   - component: {fileID: 8657823886293718099}
   - component: {fileID: 1632295405972461884}
   - component: {fileID: 5742930117492303466}
+  - component: {fileID: 7042113016572373541}
   m_Layer: 5
   m_Name: title
   m_TagString: Untagged
@@ -6333,6 +6462,21 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u589E\u52A0 2P"
+--- !u!114 &7042113016572373541
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8398800510753710764}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Add_2P
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &8443050917220159479
 GameObject:
   m_ObjectHideFlags: 0
@@ -6439,13 +6583,13 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 8809921120636371870}
+  m_Father: {fileID: 3319966071402702626}
   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: 310, y: -46.5}
-  m_SizeDelta: {x: 570, y: 32}
+  m_AnchoredPosition: {x: 150, y: -25}
+  m_SizeDelta: {x: 300, y: 50}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3479065381201898888
 CanvasRenderer:
@@ -6481,11 +6625,11 @@ MonoBehaviour:
     m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 1
-    m_MaxSize: 40
-    m_Alignment: 4
+    m_MaxSize: 50
+    m_Alignment: 5
     m_AlignByGeometry: 0
     m_RichText: 1
-    m_HorizontalOverflow: 0
+    m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: HOUYU 1
@@ -7212,18 +7356,18 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 8760962491654948458}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  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: 5756235976269569222}
-  m_RootOrder: 0
+  m_Father: {fileID: 3115437585392817648}
+  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: 142.5, y: -14}
-  m_SizeDelta: {x: 285, y: 28}
+  m_AnchoredPosition: {x: 310, y: -131.5}
+  m_SizeDelta: {x: 285, y: 45}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &49497840751108719
 CanvasRenderer:
@@ -7255,16 +7399,16 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 12800000, guid: 6b6cc7ab59ef00947950b61fdca2d042, type: 3}
-    m_FontSize: 24
-    m_FontStyle: 0
+    m_FontSize: 45
+    m_FontStyle: 1
     m_BestFit: 0
     m_MinSize: 1
-    m_MaxSize: 40
-    m_Alignment: 5
+    m_MaxSize: 45
+    m_Alignment: 4
     m_AlignByGeometry: 0
     m_RichText: 1
-    m_HorizontalOverflow: 0
-    m_VerticalOverflow: 0
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: Connect
 --- !u!114 &2040204180109477403

+ 6 - 0
Assets/BowArrow/Resources/Textures/GameIcon/Prefabs/Views/Home/HomeView.prefab

@@ -10539,11 +10539,17 @@ MonoBehaviour:
     textId: OlynpicArchery
     languageType: 1
     startGameType: 1
+  - Name: "\u5965\u8FD0\u5C04\u51FB"
+    Icon: {fileID: 21300000, guid: 18d66f5fc74c78742859488b9296f558, type: 3}
+    textId: OlynpicArcheryGun
+    languageType: 1
+    startGameType: 1
   - Name: "\u6C34\u679C\u8FBE\u4EBA"
     Icon: {fileID: 21300000, guid: b8367c46f13808d46899bfa042e711cd, type: 3}
     textId: FruitExpert
     languageType: 1
     startGameType: 15
+  - Name: "\u79FB\u52A8\u9776"
   gameIndex: 0
 --- !u!114 &6767739428596938328
 MonoBehaviour:

+ 15 - 0
Assets/BowArrow/Scenes/Game.unity

@@ -11999,6 +11999,7 @@ GameObject:
   - component: {fileID: 1088742833}
   - component: {fileID: 1088742836}
   - component: {fileID: 1088742835}
+  - component: {fileID: 1088742837}
   - component: {fileID: 1088742834}
   m_Layer: 5
   m_Name: CrossHair
@@ -12077,6 +12078,20 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1088742832}
   m_CullTransparentMesh: 0
+--- !u!114 &1088742837
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1088742832}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3731034ce1a974145b368df4817bbf0e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  targetImageSize: {x: 98, y: 98}
+  crossHairSprite: {fileID: 21300000, guid: 225abf6d1663b6941a1ed18ecc63babf, type: 3}
 --- !u!1 &1094424208
 GameObject:
   m_ObjectHideFlags: 0

+ 73 - 21
Assets/BowArrow/Scripts/Bluetooth/AimHandler.cs

@@ -83,6 +83,24 @@ public class AimDeviceInfos
     public bool bInitOne = false;
 
 
+    public OnCrossBtnEventEvent OnCrossBtnEvent;
+    public delegate void OnCrossBtnEventEvent();
+    /// <summary>
+    /// 准心事件
+    /// </summary>
+    public void InvokeOnCrossBtnEvent()
+    {
+        try
+        {
+            OnCrossBtnEvent?.Invoke();
+        }
+        catch (Exception e)
+        {
+            Debug.LogError(e);
+        }
+    }
+
+
     void Start()
     {
         ins = this;
@@ -100,6 +118,18 @@ public class AimDeviceInfos
         PlayerPrefs.DeleteKey("aim-device-info-" + LoginMgr.myUserInfo.id);
         aimDeviceInfos.arry.Clear();
     }
+    /// <summary>
+    /// 移除2p。即除了1p之后的设备
+    /// </summary>
+    public void onClear2PAimDeviceInfosNew()
+    {
+        OnGetAimDeviceInfos();
+        if (aimDeviceInfos.arry.Count > 1)
+        {
+            aimDeviceInfos.arry.RemoveRange(1, aimDeviceInfos.arry.Count - 1);
+        }
+        OnSaveAimDeviceInfos();
+    }
     public void OnGetAimDeviceInfos() {
         string deviceInfo = PlayerPrefs.GetString("aim-device-info-" + LoginMgr.myUserInfo.id, "");
         Debug.Log("get deviceSelectIndex:" + deviceInfo);
@@ -259,6 +289,9 @@ public class AimDeviceInfos
     }
     [NonSerialized] public bool lerpForRotation = true;
     [NonSerialized] public float lerpTimeRate = 7;
+
+    //加一个枪射击的触发时间
+    float _lastShootTime = 0;
     public void Update()
     {
         //&& !InfraredDemo.running
@@ -281,10 +314,11 @@ public class AimDeviceInfos
             m_magCompleted = false;
         }
 
-        if (Input.GetKeyDown(KeyCode.Space))
-        {
-            AutoResetView.DoIdentity();
-        }
+        //if (Input.GetKeyDown(KeyCode.Space))
+        //{
+        //    //AutoResetView.DoIdentity();
+        //    CrossBtnEvent();
+        //}
     }
 
     public void OnDataReceived(byte[] bytes)
@@ -322,26 +356,17 @@ public class AimDeviceInfos
                             //模拟鼠标弹出时候
                             InfraredGuider infraredGuider = FindAnyObjectByType<InfraredGuider>();
 
-                            if (infraredGuider != null)
-                            {
-                                //待检测到用户操作了两次单击按键功能,进入下一步
-
-                                if (GameMgr.ButtonCount == 1)
-                                {
-                                    GameMgr.ButtonCount = 0;
-                                    infraredGuider.OnStep2ShootTest();
-                                }
-                                else
-                                {
-                                    GameMgr.ButtonCount++;
-                                }
-                            }
-                            else
+                            if (infraredGuider == null)
                             {
                                 //视角回正
                                 DoIdentity();
                                 //鼠标居中自然会居中
                             }
+                            //流程触发红外描点
+                            InfraredScreenPositioningView infraredScreenPositioningView = FindAnyObjectByType<InfraredScreenPositioningView>();
+                            if (infraredScreenPositioningView) { 
+                                InvokeOnCrossBtnEvent();
+                            }
                         }
                         else
                         {
@@ -365,8 +390,17 @@ public class AimDeviceInfos
                 {
                     //红外部分
                     if (GlobalData.MyDeviceMode == DeviceMode.Gun || BluetoothAim.ins && BluetoothAim.ins.isMainConnectToInfraredDevice())
-                    {     //‘校准'功能的调用,使用原来调出光标的功能键;即在HOUYI Pro使用长按视角归位键;在ARTEMIS Pro使用快速双击按键
-                        AutoResetView.DoIdentity();
+                    {
+                        InfraredGuider infraredGuider = FindAnyObjectByType<InfraredGuider>();
+                        //‘校准'功能的调用,使用原来调出光标的功能键;即在HOUYI Pro使用长按视角归位键;在ARTEMIS Pro使用快速双击按键
+                        if (infraredGuider == null)
+                        {
+                            AutoResetView.DoIdentity();
+                        }
+                        else {
+                            //先判断是否处于校准步骤
+                            infraredGuider.onLongClickDevice();
+                        }
                     }
                     else  if (SB_EventSystem.ins)
                     {
@@ -384,6 +418,18 @@ public class AimDeviceInfos
             }
             else if (bytes[0] == 0x5b)
             {
+                if (GlobalData.MyDeviceMode == DeviceMode.Gun) {
+
+                    if (Time.realtimeSinceStartup - _lastShootTime < 1) return;
+                    _lastShootTime = Time.realtimeSinceStartup;
+                    //流程触发红外描点
+                    InfraredScreenPositioningView infraredScreenPositioningView = FindAnyObjectByType<InfraredScreenPositioningView>();
+                    if (infraredScreenPositioningView)
+                    {
+                        InvokeOnCrossBtnEvent();
+                    }
+                }
+
                 //红外射击检测
                 ShootCheck.ins.ShootByInfrared(bytes);
             }
@@ -512,6 +558,8 @@ public class AimDeviceInfos
     {
         Debug.Log("CrossBtnEvent");
         //准心开关
+        InvokeOnCrossBtnEvent();
+
         if (GameAssistUI.ins)
         {
             InfraredGuider infraredGuider = FindAnyObjectByType<InfraredGuider>();
@@ -521,6 +569,10 @@ public class AimDeviceInfos
                 Button crossHairBtn = GameAssistUI.ins.transform.Find("Button5").GetComponent<Button>();
                 crossHairBtn.onClick.Invoke();
             }
+            else {
+                
+                infraredGuider.onClickDevice();
+            }
 
 
             //if (GameMgr.bShowDistance)

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

@@ -845,6 +845,7 @@ public class BluetoothAim : MonoBehaviour
     bool userDoConnect2P = false;
     int _scanCanRetryCount2P = 4;
     bool canConnect2P = true;
+    public bool bNoNeedToReconnect { get; set; } = true;//是否需要重连
 
     bool lerpForRotation2P = true;
     float lerpTimeRate2P = 7;
@@ -978,6 +979,7 @@ public class BluetoothAim : MonoBehaviour
                 GameController.ins.GetBowCameraDoublePlayer(PlayerType.SecondPlayer).isTouchMode = true;
             }
             Debug.Log("<color=blue>未连接</color>(点击连接)");
+            if (!bNoNeedToReconnect) return;
 
             scanLock = false;
             if (_scanCanRetryCount2P > 0)
@@ -1054,7 +1056,8 @@ public class BluetoothAim : MonoBehaviour
         {
             connectCanceled = false;
             userDoConnect2P = true;
-            doConnect2P = true;;
+            doConnect2P = true;
+            bNoNeedToReconnect = true;
             Connect2P();
         }
         else if (smartBowHelper2P.GetBluetoothStatus() == SmartBowSDK.BluetoothStatusEnum.Connected)

+ 1 - 1
Assets/BowArrow/Scripts/CommonConfig.cs

@@ -105,7 +105,7 @@ public class CommonConfig
     /// 暂时Pc开启验证
     /// </summary>
 #if UNITY_STANDALONE_WIN || UNITY_EDITOR
-    public static bool EnableDecryption = true;
+    public static bool EnableDecryption = false;
 #else
     public static bool EnableDecryption = false;
 #endif

+ 54 - 12
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json

@@ -127,6 +127,7 @@
   "new-user-guider_tip_视角归位-触发": "短按模块上的<color=#FFA500>“视角归位”</color>键,<color=#FFA500>参考图中\n姿势将弓箭瞄准靶心</color>,3秒后完成视角归位。",
   "new-user-guider_tip_视角归位-瞄准": "请参考图中姿势,立即瞄准靶心,\n<size=40><color=#FFA500>{0}</color></size>秒后完成视角归位。",
   "new-user-guider_tip_视角归位-瞄准-infrared": "请参考图中姿势,以箭筒头部为参考点,\n立即瞄准靶心,<size=40><color=#FFA500>{0}</color></size>秒后完成准心校准。",
+  "new-user-guider_tip_视角归位-瞄准-infrared-gun": "请快速装回弹夹后,用三点一线的射击姿势\n瞄准靶心,<size=40><color=#FFA500>{0}</color></size>秒后完成准心校准。",
   "new-user-guider_tip_教程结束": "恭喜您完成了本次新手教程,下次如果还\n要<color=#FFA500>了解本教程</color>,请在<color=#FFA500>设置中查看新手指导</color>。",
   "new-user-guider_tip_准心高亮": "请按提示向箭靶上射中一箭后,\n完成本次手动设置,并回到连接页面。",
   "new-user-guider_btn_ok": "确定",
@@ -335,6 +336,7 @@
 
   "======OlynpicArchery======": "注释",
   "OlynpicArchery": "奥运射箭",
+  "OlynpicArcheryGun": "奥运射击",
 
   "======FruitExpert======": "注释",
   "FruitExpert": "水果达人",
@@ -349,7 +351,7 @@
   "WolfHunt": "猎狼",
 
   "======MovingTarget======": "注释",
-  "MovingTarget": "移动目标",
+  "MovingTarget": "移动",
 
   /**
   homeView tip 页面
@@ -385,7 +387,9 @@
   连接页面
   **/
   "Connect_Title": "连接",
-  "Connect_AddDeviceTitle": "手动添加 WONDERFITTER 设备",
+  "Connect_MyDeviceTitle1P": "1P  我的WONDERFITTER 设备",
+  "Connect_MyDeviceTitle2P": "2P  我的WONDERFITTER 设备",
+  "Connect_AddDeviceTitle": "WONDERFITTER设备控制面板",
   "Connect_ButtonText": "点击进行连接",
   "Connect_Device_Init": "初始化",
 
@@ -395,6 +399,16 @@
   "Connect_BLE_Break": "断开连接",
   "Connect_BLE_None": "未知",
 
+  "Connect_Btn_Archery": "智能弓箭",
+  "Connect_Btn_Gun": "智能手枪",
+
+  "Connect_Btn_Screen": "屏幕定位",
+  "Connect_Btn": "连接设备",
+  "Disconnect_Btn": "断开连接",
+  "Add_2P": "增加 2P",
+  "Device_Switch": "切换设备",
+  "Connect_Tip": "请先连接设备。",
+
   /**
   ConnectGuidanceView 页面
   **/
@@ -502,6 +516,7 @@
   "Result-Second": "秒",
   "Result-TimeLabel": "锻炼时间",
   "Result-ShootingLabel": "射箭",
+  "Result-GunShootingLabel": "射击",
   "Result-ShootUnit": "arr.",
   "Result-CaloriesLabel": "燃烧卡路里",
   "Result-CaloriesUnit": "kcal",
@@ -515,24 +530,42 @@
   "Infrared-ScreenPositioning": "进入屏幕定位",
   "Infrared-Step1": "先进行投屏,并将激光定位器放置于电视前方,使摄像头上仰朝向屏幕。",
   "Infrared-Step2_title": "屏幕定位说明",
-  "Infrared-Step2": "调整激光定位器位置和角度,使其可以清晰地拍摄到屏幕的四角。\n\n先点击自动按键进行屏幕识别,屏幕上会出现黑屏和白屏的图像,并通过软件识别屏幕的显示区域。\n\n如自动识别不准确,可以通过调整激光定位器位置或对图像对比度进行调节后,再次自动识别。如多次自动识别不合格,可点击手动功能,并通过手指点击拖动定位区域四个角进行调整。",
-
-
+  "Infrared-Step2": "",
+  "Infrared-new-Step1": "1.请将手机画面投射到电视或投影仪上 (建议使用投屏器)",
+  "Infrared-new-Step2": "2.请将激光定位器放在电视前下方,确保其底部低于电视屏幕",
+  "Infrared-new-Step3": "3.避免强光或阳光直射电视/投影屏幕和激光定位器",
   /**
   手动识别部分
   **/
-  "TitleTip1": "调整激光定位器位置和角度,使其可以清晰地拍摄到屏\n幕的四角。先点击自动按键进行屏幕识别,屏幕上会出\n现黑屏和白屏的图像,并通过软件识别屏幕的显示区域。",
-  "TitleTip2": "如自动识别不准确,可以通过调整激光定位器位置或对图像对比度\n进行调节,使屏幕的边缘较清晰后,再次自动\n识别。如多次自动识别不成功,可点击手动功能,并通过手指点击拖动定位区域四个角\n进行调整。点击确认按键进入下一步。",
+  "TitleTip1": "调整激光定位器的角度和位置,\n使摄像头可以完整地拍摄到整个电视屏幕",
+  "TitleTip2": "如自动识别不准确,可调整激光定位器或调整图像对比度,使屏幕\n边缘更清晰后,再次自动识别;\n如多次自动识别不成功,可点击手动功能,并用手指拖动定位区域\n四个角进行调整,点击确认进入下一步。",
   "Withdrawal": "撤回",
   "Automatic": "自动",
   "Manual": "手动",
   "Confirm": "确认",
-
+  "Finish": "完成",
+  "Reset": "重置",
+  "EnterMarker": "进入屏幕标记",
+  "TitleTipMarker": "使用{0}的红外激光瞄准屏幕的四个角,\n并单击准心键确认标记。待四个角都标记完成后,点击完成进入下一步",
+  "TitleTipMarker-HOUYIPro": "HOUYI Pro瞄准模块",
+  "TitleTipMarker-ArtemisPro": "Artemis Pro",
+  "TitleTipMarker-M9": "操作M9手枪依次瞄准屏幕的四个角\n扣动扳机进行标记(四角位置标签)",
+  "ScreenPositioningSuccessful-title": "屏幕定位成功,请选择最佳方案",
+  "FirstResult": "结果一",
+  "SecondResult": "结果二",
+  "FirstLineTip": "AI自动识别的结果",
+  "SecondLineTip": "通过四角位置标签,半自动识别的结果",
+  "FittingFailed": "拟合失败,继续点击完成.",
+  "Incomplete": "请完成屏幕四个角的标记后,再点击完成进入下一步",
   /**
    红外连接后游戏射击页面
   **/
-  "TopTip_ARTEMISPro": " 如未发现异常问题,请将箭筒头部垂直于屏幕并对准10米箭靶的圆心,\n并双击弓箭上的按键进行准心校准。",
-  "TopTip": " 如未发现异常问题,请将箭筒头部垂直于屏幕并对准10米箭靶的圆心,\n并长按模块上的 <sprite=0> 按键3秒进行准心校准。",
+  "TopTip_CrossHair": "单击模块上的 <sprite=0> 按键,这是进入准心调整界面的开/关,\n请连续操作两次。",
+  "TopTip_CrossHairPro": "单击设备上的按键,这是进入准心调整界面的开/关,\n请连续操作两次。",
+  "TopTip_CrossHairGunPro": "取出弹夹模块,单击其上的按键,这是进入准心\n调整界面的开/关,请连接操作两次。",
+  "TopTip_ARTEMISPro": " 双击设备上的按键进行准心校准,之后请用正常的拉弓姿势,\n以箭筒头部为参考点瞄准靶心,10秒后完成准心校准。",
+  "TopTip_GunPro": "取出弹夹模块,双击其上的按键进行准心校准,快速装回弹夹后,\n用三点一线的射击姿势瞄准靶心,10秒后完成准心校准。",
+  "TopTip": " 长按模块上的按键 <sprite=0> 3秒进行准心校准,之后请用正常的拉弓姿势,以箭筒头部为参考点瞄准靶心,10秒后完成准心校准",
   "TopTip2": "准心已校准,请射中靶子后,自动退出界面。",
   "LeftTitle": "异常问题检测",
   "LeftTip": "1、如发现光标不顺滑,或光标的移动范围不够大,请调整图像亮度或重新进行屏幕定位。\n\n2、如发现光标移动时有延时的现象,请调整分辨率或更换性能更好的手机后,再重新进行测试。\n\n3、如发现光标会随机闪烁不同的位置,或无法移动时,请点击环境测光寻找干扰源,并屏蔽干扰源。",
@@ -540,22 +573,31 @@
   "ExitGuidance": "退出引导",
   "ResolutionSettings": "分辨率设置",
   "AmbientMetering": "环境测光",
-  "ImageBrightness": "图像亮度",
+  "ImageBrightness": "图片亮度",
+  "BrightnessOrContracts": "亮度和对比度",
   "CameraSensitivity": "相机感光度",
   "AbnormalIssues": "异常问题处理",
 
+  "ErrorStepTip": "请移动弓箭控制准心,使其移动到四个圆点。\n当准心无法移动到四个圆点时,请点击“异常问题处理”。",
+  "ErrorTip1": "1.\n如发现光标移动时有延时的现象,请调整分辨率或更换性能更好的手机后,再重新进行测试。",
+  "ErrorTip2": "2.\n如发现光标会随机闪烁不同的位置,或无法移动时,请点击环境测光寻找干扰源,并屏蔽干扰源。",
+  "ErrorTip3": "3.\n如发现光标不顺滑,或光标的移动范围不够大,请调整图像亮度或对比度。",
   /**
    红外连接后游戏测试页面
   **/
   "ShootingTest": "射击测试",
   "BackShootingTest": "返回射击测试",
   "ImageContrast": "图像对比度",
-  "ShootingTestTip": "保持画面里的屏幕没有白色光斑,如果有光斑,需要找出干扰光源关闭它,或调整摄像头支架位置以屏蔽它。",
+  "ShootingTestTip": "保持画面里的屏幕没有白色光斑,如果有光斑,需要找出干扰光源关闭它或调整激光定位器位置以屏蔽它。",
 
   "ModifyResolution": "修改分辨率",
   "HighResolution": "高分辨率",
   "LowResolution": "低分辨率",
 
+  "Bright": "亮",
+  "Dark": "暗",
+  "Brightness": "亮度",
+  "Contrast": "对比度",
   /**
    子弹部分
   **/

+ 54 - 10
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json

@@ -128,6 +128,8 @@
   "new-user-guider_tip_视角归位-触发": "Short press the <color=#FFA500>\"Aim Reset\"</color> \nkey on the module, <color=#FFA500>aim the bow \nand arrow at the bull's eye with \nreference to the posture in the \npicture</color>, and then complete the \nvisual angle return in 3 seconds.",
   "new-user-guider_tip_视角归位-瞄准": "Please refer to the pose in the figure, aim \nat the bull's-eye immediately, the visual \nangle return will be completed in <size=40><color=#FFA500>{0}</color></size> seconds.",
   "new-user-guider_tip_视角归位-瞄准-infrared": "Please refer to the posture in the image, using the arrowhead \nas a reference point,and aim at the target center immediately.\n<size=40><color=#FFA500>{0}</color></size> seconds later, the crosshair calibration will be completed.",
+  "new-user-guider_tip_视角归位-瞄准-infrared-gun": "Please quickly reload the magazine, then use the sight alignment\n shooting stance (three-point alignment) to aim at the bullseye. \nThe reticle calibration will be completed in <size=40><color=#FFA500>{0}</color></size> seconds.",
+
   "new-user-guider_tip_教程结束": "Congratulations on completing this novice tutorial. If you want \nto <color=#FFA500>know this tutorial</color> next time, please <color=#FFA500>see the novice guidance \nin the setup.</color>",
   "new-user-guider_tip_准心高亮": "Please follow the prompts to \nshoot an arrow towards the \ntarget, complete the manual \nsetup, and return to the \nconnection page.",
   "new-user-guider_btn_ok": "OK",
@@ -384,6 +386,7 @@
 
   "======OlynpicArchery======": "注释",
   "OlynpicArchery": "Olympic Archery",
+  "OlynpicArcheryGun": "Olympic Shooting",
 
   "======FruitExpert======": "注释",
   "FruitExpert": "Fruit Expert",
@@ -432,7 +435,9 @@
   连接页面
   **/
   "Connect_Title": "Connect",
-  "Connect_AddDeviceTitle": "Add WONDERFITTER device manually",
+  "Connect_MyDeviceTitle1P": "1P My WONDERFITTER Device",
+  "Connect_MyDeviceTitle2P": "2P My WONDERFITTER Device",
+  "Connect_AddDeviceTitle": "WONDERFITTER Equipment Control Panel",
   "Connect_ButtonText": "Tap to connect",
   "Connect_Device_Init": "Init",
 
@@ -442,6 +447,15 @@
   "Connect_BLE_Break": "Break",
   "Connect_BLE_None": "None",
 
+  "Connect_Device_Archery": "Intelligent Archery",
+  "Connect_Device_Gun": "Intelligent Gun",
+
+  "Connect_Btn_Screen": "Screen Positioning",
+  "Connect_Btn": "Connect Device",
+  "Disconnect_Btn": "Disconnect",
+  "Add_2P": "Add 2P",
+  "Device_Switch": "Switch Device",
+  "Connect_Tip": "Please connect the device first.",
   /**
   ConnectGuidanceView 页面
   **/
@@ -552,6 +566,7 @@
   "Result-Second": "sec.",
   "Result-TimeLabel": "Time Exercising",
   "Result-ShootingLabel": "Arrows Shooting",
+  "Result-GunShootingLabel": "Shooting",
   "Result-ShootUnit": "arr.",
   "Result-CaloriesLabel": "Calories Burned",
   "Result-CaloriesUnit": "kcal",
@@ -564,24 +579,43 @@
   "Infrared-ScreenPositioning": "Enter Screen Positioning",
   "Infrared-Step1": "First, cast the screen and place the laser locator in front of the TV, with the camera facing upwards towards the screen.",
   "Infrared-Step2_title": "Screen Positioning Instructions",
-  "Infrared-Step2": "Adjust the position and angle of the laser locator so that it can clearly capture the four corners of the screen.\n\nFirst, click the auto button to perform screen recognition. The screen will display black and white images, and the software will identify the display area of the screen.\n\nIf automatic recognition is inaccurate, you can adjust the position of the laser locator or the image contrast, then try automatic recognition again. If multiple attempts at automatic recognition fail, you can click the manual function and use your finger to click and drag the four corners of the positioning area to adjust.",
-
+  "Infrared-Step2": "",
+  "Infrared-new-Step1": "1. Please cast the phone screen to the TV or projector. (It is recommended to use a screen mirroring device).",
+  "Infrared-new-Step2": "2. Please place the laser pointer in front of the TV, ensuring its base is lower than the TV screen.",
+  "Infrared-new-Step3": "3. Avoid direct exposure of strong light or sunlight to the TV/projector screen and the laser pointer.",
 
   /**
   手动识别部分
   **/
-  "TitleTip1": "Adjust the position and angle of the laser locator so that it \ncan clearly capture the four corners of the screen.First, click \nthe auto button to perform screen recognition. The screen will \ndisplay black and white images, and the software will identify \nthe display area of the screen.",
-  "TitleTip2": "If automatic recognition is inaccurate, you can adjust the position \nof the laser locator or the image contrast to make the screen edges \nclearer,then try automatic recognition again.If multiple attempts \nat automatic recognition fail, you can click the manual function and \nuse your finger to click and drag the four corners of the positioning \narea to adjust.Click the confirm button to proceed to the next step.",
+  "TitleTip1": "Adjust the angle and position of the laser locator so \nthat the camera can capture the entire TV screen completely",
+  "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. ",
   "Withdrawal": "Withdrawal",
   "Automatic": "Automatic",
   "Manual": "Manual",
   "Confirm": "Confirm",
-
+  "Finish": "Finish",
+  "Reset": "Reset",
+  "EnterMarker": "Enter Screen Marker",
+  "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.",
+  "TitleTipMarker-HOUYIPro": "HOUYI Pro Aiming Module",
+  "TitleTipMarker-ArtemisPro": "Artemis Pro",
+  "TitleTipMarker-M9": "Operate M9 pistol to aim at the four corners of the screen \nin sequence, pull the trigger to mark (four corner position label)",
+  "ScreenPositioningSuccessful-title": "Screen positioning successful, please choose the best solution",
+  "FirstResult": "First Result",
+  "SecondResult": "Second Result",
+  "FirstLineTip": "The result of AI automatic recognition",
+  "SecondLineTip": "The result of semi-automatic recognition through four corner position labels",
+  "FittingFailed": "Fitting failed, continue clicking to complete.",
+  "Incomplete": "Please mark the four corners of the screen before clicking 'Finish' to proceed to the next step",
   /**
    红外连接后游戏射击页面
   **/
-  "TopTip_ARTEMISPro": "If no abnormal issues are found, please align the head of the arrow barrel \nvertically with the screen and aim it at the center of the 10 meter arrow target,\nand double-click the button on the bow to calibrate the center of gravity。",
-  "TopTip": "If no abnormal issues are found, please align the head of the arrow barrel vertically with the screen and aim it at the center of the 10 meter arrow target,\nand long press the <sprite=0> button on the module for 3 seconds to perform center calibration.",
+  "TopTip_CrossHair": "Click the <sprite=0> button on the module to enter the center adjustment \n interface. Please operate it twice in a row.",
+  "TopTip_CrossHairPro": "Click the button on the device. This toggles the crosshair adjustment interface on/off.\nPlease perform this action twice in a row.",
+  "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 connect the operation twice",
+  "TopTip_ARTEMISPro": "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 \nas the reference point. After 10 seconds, complete the center of gravity calibration.",
+  "TopTip_GunPro": "Remove the magazine module, double-click the button on it to calibrate the center\n of sight, quickly reinstall the magazine, aim at the target with a three-point line\n shooting posture, and complete the center of sight calibration after 10 seconds.",
+  "TopTip": "Press and hold the button<sprite=0>on the module for 3 seconds to calibrate the center of sight. Then, use the normal bow position and aim at the target with the head of the arrow tube as the reference point. After 10 seconds, complete the center of sight 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.",
@@ -590,22 +624,32 @@
   "ResolutionSettings": "Resolution Settings",
   "AmbientMetering": "Ambient Metering",
   "ImageBrightness": "Image Brightness",
+  "BrightnessOrContracts": "Brightness Or Contrast",
   "CameraSensitivity": "Camera Sensitivity",
   "AbnormalIssues": "Abnormal Issues",
 
+  "ErrorStepTip": "Please move the bow and arrow control center to the four dots.\nWhen the center cannot move to the four dots, please click on 'Exception Handling'.",
+  "ErrorTip1": "1.\nIf there is a delay when the cursor moves, please adjust the resolution or replace it with a better performing phone before retesting.",
+  "ErrorTip2": "2.\nIf you find that the cursor randomly flashes at different positions or cannot move, please click on the ambient metering to find the interference source and block it.",
+  "ErrorTip3": "3.\nIf you find that the cursor is not smooth or the movement range of the cursor is not large enough, please adjust the brightness or contrast of the image.",
+
+
   /**
    红外连接后游戏测试页面
   **/
   "ShootingTest": "Shooting Test",
   "BackShootingTest": "Back Shooting Test",
   "ImageContrast": "Image Contrast",
-  "ShootingTestTip": "Keep the screen in the picture free of white light spots. If there are light \nspots, you need to find the interfering light source and turn it off, or adjust \nthe camera bracket position to block it.",
+  "ShootingTestTip": "Keep the screen in the picture free of white light spots. If there are light \nspots, it is necessary to identify the interfering light source and turn it off \nor adjust the position of the laser locator to shield it.",
 
   "ModifyResolution": "Modify Resolution",
   "HighResolution": "High Resolution",
   "LowResolution": "Low Resolution",
 
-
+  "Bright": "Bright",
+  "Dark": "Dark",
+  "Brightness": "Brightness",
+  "Contrast": "Contrast",
   /**
    子弹部分
   **/

+ 37 - 5
Assets/BowArrow/Scripts/Expand/AutoResetView.cs

@@ -55,7 +55,22 @@ public class AutoResetView : MonoBehaviour
             AimHandler.ins.DoIdentity();
         }
     }
-    
+    /// <summary>
+    /// 引导页面弹出校准
+    /// </summary>
+    public static void onInfraredGuiderAutoResetView() {
+
+      AutoResetView autoResetView =  Instantiate(Resources.Load<GameObject>("Prefabs/Views/AutoResetView")).GetComponent<AutoResetView>();
+      autoResetView.bInfraredGuider = true;
+      autoResetView.infraredGuiderTime = GlobalData.MyDeviceMode == DeviceMode.Gun ? 5 : 10;
+    }
+
+    /// <summary>
+    /// 是否是引导
+    /// </summary>
+    public bool bInfraredGuider = false;
+    public float infraredGuiderTime = 10;
+
     void Awake() {
         if (ins) {
             Destroy(gameObject);
@@ -65,7 +80,15 @@ public class AutoResetView : MonoBehaviour
     }
 
     void Start() {
-        prepareTime = UserSettings.ins.calibrationTime;
+        //进入引导游戏场景时候,设置时间
+        if (bInfraredGuider)
+        {
+            prepareTime = infraredGuiderTime;
+        }
+        else {
+
+            prepareTime = UserSettings.ins.calibrationTime;
+        }
         Debug.Log("弓箭重置时间:" + prepareTime);
 
         if (SceneManager.GetActiveScene().name == "Game") {
@@ -142,9 +165,18 @@ public class AutoResetView : MonoBehaviour
                 _guideTip = text.GetComponentInChildren<TextAutoLanguage2>();
             }
             else {
-                Transform textInfrared = transform.Find("FrameTip/Text-Infrared");
-                textInfrared.gameObject.SetActive(true);
-                _guideTip = textInfrared.GetComponentInChildren<TextAutoLanguage2>();
+                if (GlobalData.MyDeviceMode == DeviceMode.Gun)
+                {
+                    Transform textInfrared = transform.Find("FrameTip/Text-Infrared-Gun");
+                    textInfrared.gameObject.SetActive(true);
+                    _guideTip = textInfrared.GetComponentInChildren<TextAutoLanguage2>();
+                }
+                else {
+                    Transform textInfrared = transform.Find("FrameTip/Text-Infrared");
+                    textInfrared.gameObject.SetActive(true);
+                    _guideTip = textInfrared.GetComponentInChildren<TextAutoLanguage2>();
+                }
+             
             }
              
         }

+ 4 - 1
Assets/BowArrow/Scripts/Expand/SB_EventSystem.cs

@@ -31,7 +31,10 @@ public class SB_EventSystem : MonoBehaviour
 
     void Update() {
         //mouseTest.Update();
-        UpdateMoveSimulateMouse();
+        if (!(ScreenLocate.Main != null && ScreenLocate.Main.DebugOnZIMDemo))
+        {
+            UpdateMoveSimulateMouse();
+        }
     }
 
     [SerializeField] public MouseConfirm mouseConfirm;

+ 3 - 1
Assets/BowArrow/Scripts/Game/CrossHair.cs

@@ -42,7 +42,9 @@ public class CrossHair : MonoBehaviour
     void Update()
     {
         //如果是新手指引的情况,或者校准时候,一定
-        if (infraredGuiderObj != null && infraredGuiderObj.activeSelf == true || AutoResetView.ins != null)
+        //infraredGuiderObj != null && infraredGuiderObj.activeSelf == true || 
+        //准心校准时候延迟一秒
+        if (AutoResetView.ins != null)
         {
             SetVisiable(true);
         }

+ 21 - 2
Assets/BowArrow/Scripts/Game/GameAssistUI.cs

@@ -335,8 +335,27 @@ public class GameAssistUI : MonoBehaviour
         BowCamera bowCamera = BowCamera.ins;
         Transform scope = bowCamera.transform.Find("Scope");
 
-        CrossHair.ins.gameObject.GetComponent<RectTransform>().sizeDelta =  
-            open ? new Vector2(500, 500) : new Vector2(260, 260);
+        if (open)
+        {
+            if (GlobalData.MyDeviceMode == DeviceMode.Gun)
+                CrossHair.ins.gameObject.GetComponent<SwitchCrossHair>().ShowOldImage(true);
+
+            CrossHair.ins.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(500, 500);
+        }
+        else {
+            if (GlobalData.MyDeviceMode == DeviceMode.Gun)
+            {
+                SwitchCrossHair switchCrossHair = CrossHair.ins.gameObject.GetComponent<SwitchCrossHair>();
+                switchCrossHair.ShowOldImage(false);
+                CrossHair.ins.gameObject.GetComponent<RectTransform>().sizeDelta = switchCrossHair.targetImageSize;
+            }
+            else {
+                CrossHair.ins.gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(260, 260);
+            }
+
+        }
+   
+
         if (open) CrossHair.ins.transform.localPosition = Vector3.zero;
 
         bowCamera.banCameraFieldOfView = open;

+ 11 - 6
Assets/BowArrow/Scripts/GameMode/TimeLimitGameMode.cs

@@ -66,16 +66,21 @@ public class TimeLimitGameMode : GameMode {
         yield return new WaitForSeconds(1.0f);
         if (GameMgr.bNavBack)
         {
-            GameMgr.bNavBack = false;
 
-            GameObject  _infraredGuiderObj = UnityEngine.Object.FindObjectOfType<InfraredGuider>()?.gameObject;
-            if (_infraredGuiderObj != null)
+            InfraredGuider _infraredGuider = UnityEngine.Object.FindObjectOfType<InfraredGuider>();
+            if (_infraredGuider != null)
             {
-                //红外光引导射击
-                //直接回到主页
-                UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
+                //红外光引导射击,如果是显示这个状态
+                if (_infraredGuider.mTipStep == TipStep.Finish) 
+                {
+                    GameMgr.bNavBack = false;
+                    //直接回到主页
+                    UnityEngine.SceneManagement.SceneManager.LoadScene("Home", UnityEngine.SceneManagement.LoadSceneMode.Single);
+                }
             }
             else {
+
+                GameMgr.bNavBack = false;
                 //普通引导时候射击
                 HomeView.bOpenOtherView = true;
                 HomeView.openName = "DeviceView";

+ 19 - 19
Assets/BowArrow/Scripts/Manager/TextureMgr.cs

@@ -9,7 +9,6 @@ public class GameInfo
     public Texture2D texture2D;
     //自动语言转换id
     public string textId;
-
     //添加哪个语言脚本
     public int languageType = 0;
 
@@ -150,24 +149,24 @@ public class TextureMgr
     TextureMgr()
     {
         // 定义游戏信息的字典
-        var gameData = new Dictionary<int, (string name, string textId, string texturePath, int languageType)>
+        var gameData = new Dictionary<int, (string name, string textId, string textIdGun, string texturePath, int languageType)>
     {
-        { 1, ("静止靶 (单人)", "OlynpicArchery", "OlynpicArchery", 1) },
-        { 2, ("静止靶 (本地PK)", "OlynpicArchery", "OlynpicArchery", 1) },
-        { 3, ("兔子关卡 (单人)", "HareHunt", "rabbit_level", 1) },
-        { 4, ("野鸡关卡 (单人)", "PheasuntHunt", "hunt_level", 1) },
-        { 5, ("野狼关卡 (单人)", "WolfHunt", "wolf_level", 1) },
-        { 6, ("兔子关卡 (本地PK)", "HareHunt", "rabbit_level", 1) },
-        { 7, ("野鸡关卡 (本地PK)", "PheasuntHunt", "hunt_level", 1) },
-        { 8, ("野狼关卡 (本地PK)", "WolfHunt", "wolf_level", 1) },
-        { 9, ("静止靶 (联机PK)", "OlynpicArchery", "OlynpicArchery", 1) },
-        {10, ("兔子关卡 (联机PK)", "HareHunt", "rabbit_level", 1) },
-        {11, ("野鸡关卡 (联机PK)", "PheasuntHunt", "hunt_level", 1) },
-        {12, ("野狼关卡 (联机PK)", "WolfHunt", "wolf_level", 1) },
-        {13, ("野鸭关卡 (单人)", "LevelDuckHunter", "duck_level", 1) },
-        {14, ("荒野射击 (单人)", "LevelWildAttack", "wild_level", 1) },
-        {15, ("水果达人 (单人)", "FruitExpert", "FruitExpert", 1) },
-        {16, ("移动目标 (单人)", "MovingTarget", "movingTarget_level", 2) },
+        { 1, ("静止靶 (单人)", "OlynpicArchery", "OlynpicArcheryGun", "OlynpicArchery", 1) },
+        { 2, ("静止靶 (本地PK)", "OlynpicArchery", "OlynpicArcheryGun", "OlynpicArchery", 1) },
+        { 3, ("兔子关卡 (单人)", "HareHunt", "HareHunt","rabbit_level", 1) },
+        { 4, ("野鸡关卡 (单人)", "PheasuntHunt", "PheasuntHunt", "hunt_level", 1) },
+        { 5, ("野狼关卡 (单人)", "WolfHunt", "WolfHunt", "wolf_level", 1) },
+        { 6, ("兔子关卡 (本地PK)", "HareHunt", "HareHunt", "rabbit_level", 1) },
+        { 7, ("野鸡关卡 (本地PK)", "PheasuntHunt", "PheasuntHunt","hunt_level", 1) },
+        { 8, ("野狼关卡 (本地PK)", "WolfHunt", "WolfHunt","wolf_level", 1) },
+        { 9, ("静止靶 (联机PK)", "OlynpicArchery","OlynpicArcheryGun", "OlynpicArchery", 1) },
+        {10, ("兔子关卡 (联机PK)", "HareHunt","HareHunt", "rabbit_level", 1) },
+        {11, ("野鸡关卡 (联机PK)", "PheasuntHunt","PheasuntHunt", "hunt_level", 1) },
+        {12, ("野狼关卡 (联机PK)", "WolfHunt", "WolfHunt","wolf_level", 1) },
+        {13, ("野鸭关卡 (单人)", "LevelDuckHunter","LevelDuckHunter", "duck_level", 1) },
+        {14, ("荒野射击 (单人)", "LevelWildAttack","LevelWildAttack", "wild_level", 1) },
+        {15, ("水果达人 (单人)", "FruitExpert","FruitExpert", "FruitExpert", 1) },
+        {16, ("移动靶 (单人)", "MovingTarget","MovingTarget", "movingTarget_level", 2) },
     };
 
         foreach (var gameEntry in gameData)
@@ -178,7 +177,8 @@ public class TextureMgr
                 gameType = gameEntry.Key,
                 name = gameEntry.Value.name,
                 languageType = gameEntry.Value.languageType,
-                textId = gameEntry.Value.textId,
+                //更具当前设备区分
+                textId = GlobalData.MyDeviceMode == DeviceMode.Gun? gameEntry.Value.textIdGun : gameEntry.Value.textId,
                 path = _path,
                 texture2D = Resources.Load(_path) as Texture2D // Load texture
             };

+ 51 - 0
Assets/BowArrow/Scripts/Util/SwitchCrossHair.cs

@@ -0,0 +1,51 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 这里用于替换准心
+/// </summary>
+public class SwitchCrossHair : MonoBehaviour
+{
+
+    Image targetImage;
+    public Vector2 targetImageSize = new Vector2(98,98);
+    public Sprite crossHairSprite;
+    Sprite oldImageSprite;
+
+    // Start is called before the first frame update
+    void Start()
+    {
+        targetImage = GetComponent<Image>();
+        oldImageSprite = targetImage.sprite;
+        if (GlobalData.MyDeviceMode == DeviceMode.Gun)
+        {
+            targetImage.sprite = crossHairSprite;
+            targetImage.rectTransform.sizeDelta = targetImageSize; // 设置 targetImage 的大小
+        }
+    }
+    /// <summary>
+    /// 切换image
+    /// </summary>
+    /// <param name="isOldImage"></param>
+    public void ShowOldImage(bool isOldImage) {
+        if (GlobalData.MyDeviceMode == DeviceMode.Gun)
+        {
+            if (isOldImage)
+            {
+                targetImage.sprite = oldImageSprite;
+            }
+            else
+            {
+                targetImage.sprite = crossHairSprite;
+            }
+        }
+    }
+
+    // Update is called once per frame
+    //void Update()
+    //{
+        
+    //}
+}

+ 11 - 0
Assets/BowArrow/Scripts/Util/SwitchCrossHair.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3731034ce1a974145b368df4817bbf0e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 34 - 11
Assets/BowArrow/Scripts/View/Home/DeviceViewInfrared.cs

@@ -68,10 +68,11 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
         {
             ShowDeviceViewItemsTwo(true);
         }
-        else {
-            ShowDeviceViewItemsTwo(false);
-        }
-      
+        //else
+        //{
+        //    ShowDeviceViewItemsTwo(false);
+        //}
+
     }
 
     void OnDestroy()
@@ -82,6 +83,12 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
         //退出面板时候,取消正在连接的连接
         BluetoothAim.ins.onCancelAllConnecting();
 
+        //如果没有连接
+        if (!deviceViewItems[1].getBLEConnectState()) {
+            //隐藏时候。直接清空这个记录数据
+            AimHandler.ins.onClear2PAimDeviceInfosNew();
+        }
+
     }
 
     void Update()
@@ -129,10 +136,11 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
                 if (Connect2Parent.activeSelf) Connect2Parent.SetActive(false);
             }
             //2p 按钮 ,两个同时蓝牙连接后。隐藏
-            if (deviceViewItems[0].getBLEConnectState() && deviceViewItems[1].getBLEConnectState())
+            if (deviceViewItems[1].gameObject.activeSelf || deviceViewItems[0].getBLEConnectState() && deviceViewItems[1].getBLEConnectState())
             {
-                if(smartConnect2Buttons[3].gameObject.activeSelf)
+                if (smartConnect2Buttons[3].gameObject.activeSelf) {
                     smartConnect2Buttons[3].gameObject.SetActive(false);
+                }
             }
             else if(!smartConnect2Buttons[3].gameObject.activeSelf)
             {
@@ -150,9 +158,12 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
             if (!deviceViewItems[1].gameObject.activeSelf)
             {
                 deviceViewItems[1].gameObject.SetActive(true);
+                deviceViewItems[1].onShowDeviceInfo();//手动刷新一下信息
                 horizontalLayoutGroup.spacing = 40;
                 //显示2p时候。默认选择中
                 deviceViewItems[1].OnSelectEvent();
+
+              
             }
         }
         else
@@ -280,8 +291,15 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
             switch (index)
             {
                 case 0:
-                    //进入屏幕定位
-                    ViewManager2.ShowView(ViewManager2.Path_InfraredView);
+                    if (selectDeviceViewItem.getBLEConnectState())
+                    {
+                        //进入屏幕定位
+                        ViewManager2.ShowView(ViewManager2.Path_InfraredView);
+                    }
+                    else {
+                        PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("Connect_Tip"));
+                    }
+                  
                     break;
                 case 1:
                     //连接设备
@@ -318,6 +336,10 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
                     {
 
                         ShowDeviceViewItemsTwo(true);
+
+                        //重置一些按钮状态和参数
+                        OnChangeSmartConnect1Button(-1);
+                        OnChangeSmartConnect2Button(-1);
                     }
                     break;
                 case 4:
@@ -327,6 +349,10 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
                         selectDeviceViewItem.OnDisConnectedEvent();
                     }
                     bSwitchDevice = true;
+
+                    //重置一些按钮状态和参数
+                    OnChangeSmartConnect1Button(-1);
+                    OnChangeSmartConnect2Button(-1);
                     break;
 
             }
@@ -398,9 +424,6 @@ public class DeviceViewInfrared : JCUnityLib.ViewBase, MenuBackInterface
     /// </summary>
     public void OnCloseAllPanelStatus() {
 
-        //重置一些按钮状态和参数
-        OnChangeSmartConnect1Button(-1);
-        OnChangeSmartConnect2Button(-1);
         bSwitchDevice = false;
         for (int i = 0; i < deviceViewItems.Count; i++)
         {

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

@@ -445,18 +445,23 @@ public class DeviceView_ItemShow : MonoBehaviour
 
         Debug.Log("OnDisConnectedEvent bluetoothPlayer:" + bluetoothPlayer);
 
-        if (BluetoothAim.ins && BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
-        {
+      
             //¶Ï¿ªÁ¬½Ó
             if (bluetoothPlayer == BluetoothPlayer.FIRST_PLAYER)
             {
-                BluetoothAim.ins.DoConnect();
+                if (BluetoothAim.ins && BluetoothAim.ins.status == BluetoothStatusEnum.ConnectSuccess)
+                    BluetoothAim.ins.DoConnect();
             }
             else
             {
+            if (BluetoothAim.ins && BluetoothAim.ins.getSmartBowHelper2P().GetBluetoothStatus() == SmartBowSDK.BluetoothStatusEnum.Connected) {
+
+                BluetoothAim.ins.bNoNeedToReconnect = false;
+
                 BluetoothAim.ins.DoConnect2P();
             }
-        }
+            }
+        
     }
     /// <summary>
     /// Ñ¡Ôñʼþ

+ 6 - 4
Assets/BowArrow/Scripts/View/Home/HomeView_ChallengeOption.cs

@@ -31,13 +31,14 @@ public class HomeView_ChallengeOption : MonoBehaviour
     [SerializeField] Button prevCellButton = default;
     [SerializeField] Button nextCellButton = default;
     [SerializeField] ScrollPanel productsPanel;
-
+    [Tooltip("所有关卡的设置信息")]
     public List<LevelInfo> levelInfos;
     List<LevelInfo> _tempLevelInfos = new List<LevelInfo>();
     //弓箭游戏列表
-    List<string> gameTextIds = new List<string> { "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt" , "MovingTarget" };
+    List<string> gameTextIds = new List<string> { "OlynpicArchery", "WolfHunt", "LevelWildAttack", "FruitExpert", "LevelDuckHunter", "HareHunt", "PheasuntHunt"};
     //切换枪械情况下切换这个游戏列表
-    List<string> gameTextIds_gun = new List<string> { "OlynpicArchery", "FruitExpert", "LevelDuckHunter", "MovingTarget" };
+    //OlynpicArcheryGun 是射击版的OlynpicArchery
+    List<string> gameTextIds_gun = new List<string> { "OlynpicArcheryGun", "FruitExpert", "LevelDuckHunter", "MovingTarget" };
     //#if UNITY_ANDROID
     //    List<String> gameTextIds = new List<string> { "OlynpicArchery", "LevelWildAttack", "FruitExpert", "LevelDuckHunter" };
     //#else
@@ -130,7 +131,8 @@ public class HomeView_ChallengeOption : MonoBehaviour
                 }
             }
         }
-        var _items = Enumerable.Range(0, 21)
+        Debug.Log("图标生成的数量是:"+ _gameTextIds.Count * 3);
+        var _items = Enumerable.Range(0, _gameTextIds.Count*3)
             .Select(i => {
                 int _index = Mathf.FloorToInt(i % _tempLevelInfos.Count);
                 LevelInfo levelInfo = _tempLevelInfos[_index];

+ 15 - 0
Assets/DuckHunter/Scenes/DuckHunter.unity

@@ -8527,6 +8527,7 @@ GameObject:
   - component: {fileID: 2091624734}
   - component: {fileID: 2091624736}
   - component: {fileID: 2091624735}
+  - component: {fileID: 2091624737}
   m_Layer: 5
   m_Name: Image
   m_TagString: Untagged
@@ -8592,6 +8593,20 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 2091624733}
   m_CullTransparentMesh: 1
+--- !u!114 &2091624737
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2091624733}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3731034ce1a974145b368df4817bbf0e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  targetImageSize: {x: 98, y: 98}
+  crossHairSprite: {fileID: 21300000, guid: 225abf6d1663b6941a1ed18ecc63babf, type: 3}
 --- !u!1 &2117762102
 GameObject:
   m_ObjectHideFlags: 0

+ 16 - 0
Assets/FruitMaster/Scenes/FruitMaster.unity

@@ -19123,6 +19123,7 @@ GameObject:
   - component: {fileID: 1086173406}
   - component: {fileID: 1086173408}
   - component: {fileID: 1086173407}
+  - component: {fileID: 1086173409}
   m_Layer: 5
   m_Name: AimingCross
   m_TagString: Untagged
@@ -19188,6 +19189,20 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1086173405}
   m_CullTransparentMesh: 1
+--- !u!114 &1086173409
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 1086173405}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3731034ce1a974145b368df4817bbf0e, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  targetImageSize: {x: 98, y: 98}
+  crossHairSprite: {fileID: 21300000, guid: 225abf6d1663b6941a1ed18ecc63babf, type: 3}
 --- !u!1001 &1089271499
 PrefabInstance:
   m_ObjectHideFlags: 0
@@ -37839,6 +37854,7 @@ MonoBehaviour:
   languageFontSizes:
   - language: 1
     fontSize: 18
+    lineSpacing: 0
 --- !u!114 &2113727363
 MonoBehaviour:
   m_ObjectHideFlags: 0

+ 1 - 1
Assets/FruitMaster/Scripts/GamingManager.cs

@@ -185,7 +185,7 @@ public class GamingManager : MonoBehaviour
 
         if (bGameStarted && !bGamePaused)
         {
-            // listen to mouse firing arrow
+            // listen to mouse firing arrow 
             if (Input.GetMouseButtonDown(0) && BowCamera.isTouchMode)
             {
                 AimingCross_img.gameObject.GetComponent<RectTransform>().position = Input.mousePosition;

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 260 - 208
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace01.unity


+ 1 - 1
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace01.unity.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 25835fb90fd26cd4ea4f76d43b699add
+guid: 71b0c88d6e2b1c64d8b342dbcf9f18f1
 DefaultImporter:
   externalObjects: {}
   userData: 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 202 - 226
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace02.unity


+ 1 - 1
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace02.unity.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 8b4b4cd86ef030d41a518cef70709fc1
+guid: 4ba6583615767164daa6b32e3a52c677
 DefaultImporter:
   externalObjects: {}
   userData: 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 202 - 226
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace03.unity


+ 1 - 1
Assets/Game_Hyperspace/Hyperspace FX/Demo/Scenes/Hyperspace03.unity.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c11ebb4255a33d0468433bf8ef2fc8dc
+guid: 7fcca2d15ab4ee64bad23e2fd61aa51a
 DefaultImporter:
   externalObjects: {}
   userData: 

+ 8 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 734bab2229ecac940a897a5ffa726abd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/0.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/0.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: fc27c13f54dec2649bb2d720cbeb659d
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/1.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/1.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: ce9765743f632064482aafcdfdcf37ab
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/2.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/2.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: dd11d5b9c6cfc2546945264a85de7171
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/3.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/3.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: c74727cf2eb4349438fea562043687b8
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/4.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/4.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: a3a036683de517d4cbb03906ad5a0e75
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/5.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/5.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: df83464cec8323143af226b299f84593
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/6.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/6.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 9f4f065fe29c89b41a3a7f4429ac6b1e
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/7.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/7.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 587cbc1f3e32e444383e1955f6ab8045
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/8.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/8.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: e4d3856b6745c774e817032febccf588
+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: 

BIN
Assets/Game_Hyperspace/NewGameUI/1_slices/9.png


+ 123 - 0
Assets/Game_Hyperspace/NewGameUI/1_slices/9.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: b6a6bb5cc3ee07b47ae6f19c06169bcd
+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: 

+ 8 - 0
Assets/Game_Hyperspace/NewUI0904/version1.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1455296b07505f24d8875434ac2ee1f7
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-01.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-01.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 577ccf47e48cd7443a52a5b81d7fc434
+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: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-03.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-03.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 322811f8f8f9d6a43a86e9cf438cd963
+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: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-04.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-04.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 4cd0c5be17422894d9f55c4e714d420e
+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: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-09.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-09.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: b10e6c9f48f5e0c458e4662102f748ab
+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: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-10.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-10.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: e617a49c25278144bbe19df6d9857919
+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: 

BIN
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-11.png


+ 123 - 0
Assets/Game_Hyperspace/NewUI0904/version1/游戏切图-11.png.meta

@@ -0,0 +1,123 @@
+fileFormatVersion: 2
+guid: 59efe51bef577854abd312b505c685a3
+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: 

+ 22 - 31
Assets/Game_Hyperspace/Script/GeneratingTarget.cs

@@ -33,7 +33,6 @@ public class GeneratingTarget : MonoBehaviour
     public GameObject Miss;
 
     public Image grade;
-    public Sprite[] gradeSprites;
 
     public Transform tp;
 
@@ -146,6 +145,8 @@ public class GeneratingTarget : MonoBehaviour
 
     public static int MaxLevel = 3;
 
+    public List<Sprite> ScoreLevel;
+
     [SerializeField]
     RectTransform _canvasRectTransform;
 
@@ -202,13 +203,19 @@ public class GeneratingTarget : MonoBehaviour
     public void OnBtnLast()
     {
         //Restart(Index - 1);
-        gm = null;
 
         onUploadScore();
+        ////结束游戏页面
+        //userGameAnalyse1.UploadData(true);
+        //userGameAnalyse1.onResetOverlayData();
+        //SceneManager.LoadScene("Home", LoadSceneMode.Single);
+
         //结束游戏页面
-        userGameAnalyse1.UploadData(true);
-        userGameAnalyse1.onResetOverlayData();
-        SceneManager.LoadScene("Home", LoadSceneMode.Single);
+        userGameAnalyse1.showResultView(() =>
+        {
+            gm = null;
+            SceneManager.LoadScene("Home", LoadSceneMode.Single);
+        });
     }
 
     void Start()
@@ -535,7 +542,7 @@ public class GeneratingTarget : MonoBehaviour
     {
         if (stop)
             return;
-        var go = GameObject.Instantiate(Miss, position, Quaternion.identity, _canvasRectTransform);
+        var go = GameObject.Instantiate(Miss, position, Quaternion.identity, tp);//_canvasRectTransform
         go.AddComponent<CountDown>();
         go.SetActive(true);
     }
@@ -555,34 +562,18 @@ public class GeneratingTarget : MonoBehaviour
             rate = 0;
         }
         shootRate.text = string.Format("{0:P0}", rate);
-        //font.ShowOverScore();
         font.Text = score;
-        if (score < 20)
-        {
-            Debug.Log("游戏失败");
-            grade.sprite = gradeSprites[0];
-            return;
-        }
-
-        if (score > 50)
+        var maxScore = 0;
+        foreach (var item in LvCfg.orders)
         {
-            Debug.Log("完美");
-            grade.sprite = gradeSprites[1];
-            return;
-        }
-
-        if (score >= 20 && score <= 30)
-        {
-            Debug.Log("合格");
-            grade.sprite = gradeSprites[2];
-            return;
-        }
-        if (score > 30 && score <= 50)
-        {
-            Debug.Log("优秀");
-            grade.sprite = gradeSprites[3];
-            return;
+            maxScore += item.Big + item.Middle + item.Small;
         }
+        maxScore *= 10;
+        var percent = (float)score / (float)maxScore * 100f;
+        Debug.Log($"得分比例:{percent}  score={score}  maxScore={maxScore}");
+        var index = Mathf.CeilToInt(percent / 10) - 1;
+        if (index < 0) index = 0;
+        grade.sprite = ScoreLevel[index];
     }
 
     public void Restart(int index)

+ 165 - 37
Assets/Game_Hyperspace/Script/Move.cs

@@ -15,13 +15,13 @@ public abstract class Move
     protected List<SpineAnimationLoader> _gos;
     protected List<SpineAnimationLoader> _setList = new List<SpineAnimationLoader>();//已经设置好坐标的靶子
 
-    protected static int RamdomNum = 50;
+    protected static int RamdomNum = 200;
     /// <summary>
     /// 是否和已生成的重叠
     /// </summary>
     /// <param name="target"></param>
     /// <returns></returns>
-    protected bool CheckOverLap(SpineAnimationLoader target, Vector2 newPos)
+    protected bool CheckOverLap(SpineAnimationLoader target, Vector2 newPos, MoveType movetype = MoveType.Stay, int count = 0)
     {
         foreach (var item in _setList)
         {
@@ -31,11 +31,62 @@ public abstract class Move
                 //有重叠的
                 return true;
             }
+            if (movetype == MoveType.LeftToRight || movetype == MoveType.RightToLeft)
+            {
+                if (distanceMin >= Math.Abs(item.transform.localPosition.y - newPos.y))
+                {
+                    return true;
+                }
+            }
+            else if (movetype == MoveType.RelativeHor)//水平相对运动
+            {
+                if (count > 2)
+                {
+                    //X处于同一方向的话 Y方向不能重叠
+                    if ((item.transform.localPosition.x < 0 && newPos.x < 0) || (item.transform.localPosition.x > 0 && newPos.x > 0))
+                    {
+                        if (distanceMin >= Math.Abs(item.transform.localPosition.y - newPos.y))
+                        {
+                            return true;
+                        }
+                    }
+                }
+                else
+                {
+                    //只有两个的话 对向也不能重叠
+                    if (distanceMin >= Math.Abs(item.transform.localPosition.y - newPos.y))
+                    {
+                        return true;
+                    }
+                }
+            }
+            else if (movetype == MoveType.RelativeVet)
+            {
+                if (count > 2)
+                {
+                    //Y处于同一方向的话 X方向不能重叠
+                    if ((item.transform.localPosition.y < 0 && newPos.y < 0) || (item.transform.localPosition.y > 0 && newPos.y > 0))
+                    {
+                        if (distanceMin >= Math.Abs(item.transform.localPosition.x - newPos.x))
+                        {
+                            return true;
+                        }
+                    }
+                }
+                else
+                {
+                    //只有两个的话 对向也不能重叠
+                    if (distanceMin >= Math.Abs(item.transform.localPosition.x - newPos.x))
+                    {
+                        return true;
+                    }
+                }
+            }
         }
         return false;
     }
 
-    protected Func<SpineAnimationLoader, Vector2, bool, bool> IsUIBlock = (SpineAnimationLoader target, Vector2 pos, bool log) =>
+    protected Func<SpineAnimationLoader, Vector2, MoveType, bool, bool> IsUIBlock = (SpineAnimationLoader target, Vector2 pos, MoveType moveType, bool log) =>
     {
         var radius = target.Radius();
 
@@ -52,24 +103,58 @@ public abstract class Move
         if (log)
             Debug.Log($"pos={pos}   paddingLeft={paddingLeft}  paddingTop={paddingTop}  paddingRight={paddingRight}  paddingDown={paddingDown}");
 
-        //上方157  左方 392
-        if (paddingTop <= 157 && paddingLeft <= 392)
-            return true;
-
-        //上方170  右方133
-        if (paddingTop <= 170 && paddingRight <= 133)
-            return true;
+        //if(moveType == MoveType.Stay || moveType.)
+        //需要对称屏蔽
 
-        //下148  左方 370
-        if (paddingDown <= 148f && paddingLeft <= 370)
-            return true;
+        if (moveType == MoveType.RightToLeft)
+        {
+            //屏蔽整个上方
+            //上方
+            if (paddingTop <= 164)
+                return true;
 
-        //下216  右方 133
-        if (paddingDown <= 216 && paddingRight <= 330)
-            return true;
+            //下  右方
+            if (paddingDown <= 108 && paddingRight <= 134)
+                return true;
+        }
+        else if (moveType == MoveType.LeftToRight)
+        {
+            //上方 左方
+            if (paddingTop <= 164 && paddingLeft <= 372)
+                return true;
+            //下  右方
+            if (paddingDown <= 108 && paddingRight <= 134)
+                return true;
+        }
+        else if (moveType == MoveType.RelativeHor)
+        {
+            //屏蔽整个上方
+            //上方
+            if (paddingTop <= 164)
+                return true;
 
-        //右方 133
-        if (paddingRight <= 133)
+            //下  右方
+            if (paddingDown <= 108 && paddingRight <= 134)
+                return true;
+        }
+        else if (moveType == MoveType.RelativeVet)
+        {
+            //屏蔽整个左方
+            //左方
+            if (paddingLeft <= 372)
+                return true;
+        }
+        else
+        {
+            //上方 左方
+            if (paddingTop <= 164 && paddingLeft <= 372)
+                return true;
+            //下  右方
+            if (paddingDown <= 108 && paddingRight <= 134)
+                return true;
+        }
+        //左 右 133
+        if (paddingRight <= 133 || paddingLeft <= 133)
             return true;
 
         return false;
@@ -119,10 +204,53 @@ public class Stay : Move
         {
             var randomPos = gos[i].GetRandomPos();
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || (CheckOverLap(gos[i], randomPos) && count > 0))
+            while (IsUIBlock(gos[i], randomPos, MoveType.Stay, false) || (CheckOverLap(gos[i], randomPos) && count > 0))
             {
                 randomPos = gos[i].GetRandomPos();
                 count--;
+                if (count <= 0)//找不到就穷举
+                {
+                    var canvasSize = GeneratingTarget.gm.GetCanvasSize();
+                    var HWidth = canvasSize.x * 0.5f;
+                    var HHeight = canvasSize.y * 0.5f;
+                    var canUse = false;
+                    var newPos = Vector2.zero;
+                    for (int xPos = 0; xPos <= HWidth * 0.7f; xPos += 20)
+                    {
+                        for (int yPos = 0; yPos < HHeight * 0.7f; yPos += 15)
+                        {
+                            newPos.x = xPos; newPos.y = yPos;
+                            if (!IsUIBlock(gos[i], newPos, MoveType.Stay, false) && !CheckOverLap(gos[i], newPos))
+                            {
+                                canUse = true;
+                                break;
+                            }
+                            newPos.x = xPos; newPos.y = -yPos;
+                            if (!IsUIBlock(gos[i], newPos, MoveType.Stay, false) && !CheckOverLap(gos[i], newPos))
+                            {
+                                canUse = true;
+                                break;
+                            }
+                            newPos.x = -xPos; newPos.y = yPos;
+                            if (!IsUIBlock(gos[i], newPos, MoveType.Stay, false) && !CheckOverLap(gos[i], newPos))
+                            {
+                                canUse = true;
+                                break;
+                            }
+                            newPos.x = -xPos; newPos.y = -yPos;
+                            if (!IsUIBlock(gos[i], newPos, MoveType.Stay, false) && !CheckOverLap(gos[i], newPos))
+                            {
+                                canUse = true;
+                                break;
+                            }
+                        }
+                        if (canUse)
+                        {
+                            randomPos = newPos;
+                            break;
+                        }
+                    }
+                }
             }
             // Debug.Log($"i ={i}  IsUIBlock={IsUIBlock(gos[i], randomPos, true)}  CheckOverLap={CheckOverLap(gos[i], randomPos)}  count={count}");
             gos[i].SetPos(randomPos);
@@ -143,7 +271,7 @@ public class LeftToRight : Move, IUpdate
         {
             var randomPos = gos[i].GetRandomPos(PosType.Left);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.LeftToRight, false) || CheckOverLap(gos[i], randomPos, MoveType.LeftToRight) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(PosType.Left);
                 count--;
@@ -169,9 +297,9 @@ public class RightToLeft : Move
         {
             var randomPos = gos[i].GetRandomPos(PosType.Right);
             int count = RamdomNum;
-            while (CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.RightToLeft, false) || CheckOverLap(gos[i], randomPos, MoveType.RightToLeft) && count > 0)
             {
-                randomPos = gos[i].GetRandomPos(PosType.Right);
+                randomPos = gos[i].GetRandomPos(PosType.RightDown);
                 count--;
             }
             var go = gos[i];
@@ -193,10 +321,10 @@ public class RelativeHor : Move
         //随机屏幕左右侧位置  一左一右
         for (int i = 0; i < gos.Count; i++)
         {
-            var tempPos = i % 2 == 0 ? PosType.Left : PosType.Right;
+            var tempPos = i % 2 == 0 ? PosType.LeftDown : PosType.RightDown;
             var randomPos = gos[i].GetRandomPos(tempPos);
             int count = RamdomNum;
-            while (CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.RelativeHor, false) || CheckOverLap(gos[i], randomPos, MoveType.RelativeHor, gos.Count) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(tempPos);
                 count--;
@@ -223,7 +351,7 @@ public class RelativeVet : Move
             var tempPos = i % 2 == 0 ? PosType.Top : PosType.Down;
             var randomPos = gos[i].GetRandomPos(tempPos);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.RelativeVet, false) || CheckOverLap(gos[i], randomPos, MoveType.RelativeVet, gos.Count) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(tempPos);
                 count--;
@@ -255,12 +383,12 @@ public class Diagonal : Move
             else
                 posType = temp ? PosType.RightTop : PosType.RightDown;
 
-            var randomPos = gos[i].GetRandomPos(posType);
+            var randomPos = gos[i].GetRandomPos(posType, 0.25f);
 
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.Diagonal, false) && count > 0)
             {
-                randomPos = gos[i].GetRandomPos(posType);
+                randomPos = gos[i].GetRandomPos(posType, 0.25f);
                 count--;
             }
             var go = gos[i];
@@ -284,11 +412,11 @@ public class W : Move
         for (int i = 0; i < gos.Count; i++)
         {
             var tempPos = i % 2 == 0 ? PosType.LeftTop : PosType.LeftDown;
-            var randomPos = gos[i].GetRandomPos(tempPos);
+            var randomPos = gos[i].GetRandomPos(tempPos, 0.25f);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.W, false) && count > 0)
             {
-                randomPos = gos[i].GetRandomPos(tempPos);
+                randomPos = gos[i].GetRandomPos(tempPos, 0.25f);
                 count--;
             }
             var go = gos[i];
@@ -327,11 +455,11 @@ public class W2 : Move
             var tempPos = temp[random];
             temp.RemoveAt(random);
 
-            var randomPos = gos[i].GetRandomPos(tempPos);
+            var randomPos = gos[i].GetRandomPos(tempPos, 0.25f);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.W2, false) && count > 0)
             {
-                randomPos = gos[i].GetRandomPos(tempPos);
+                randomPos = gos[i].GetRandomPos(tempPos, 0.25f);
                 count--;
             }
             var go = gos[i];
@@ -362,7 +490,7 @@ public class HOR : Move
         {
             var randomPos = gos[i].GetRandomPos(tempPos);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.HOR, false) || CheckOverLap(gos[i], randomPos) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(tempPos);
                 count--;
@@ -390,7 +518,7 @@ public class VET : Move
         {
             var randomPos = gos[i].GetRandomPos(tempPos);
             int count = RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.VET, false) || CheckOverLap(gos[i], randomPos) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(tempPos);
                 count--;
@@ -416,7 +544,7 @@ public class ROT : Move, IUpdate
         {
             var randomPos = gos[i].GetRandomPos(PosType.Rotate);
             int count = 2 * RamdomNum;
-            while (IsUIBlock(gos[i], randomPos, false) || CheckOverLap(gos[i], randomPos) && count > 0)
+            while (IsUIBlock(gos[i], randomPos, MoveType.ROT, false) || CheckOverLap(gos[i], randomPos) && count > 0)
             {
                 randomPos = gos[i].GetRandomPos(PosType.Rotate);
                 count--;

+ 3 - 4
Assets/Game_Hyperspace/Script/SpineAnimationLoader.cs

@@ -120,14 +120,13 @@ public class SpineAnimationLoader : MonoBehaviour
         return radius;
     }
 
-    float paddingWRate = 0.1f;
-    float paddingHRate = 0.1f;
-
     /// <summary>
     /// 随机一个坐标
     /// </summary>
-    public Vector2 GetRandomPos(PosType posType = PosType.Random)
+    public Vector2 GetRandomPos(PosType posType = PosType.Random, float rate = 0)
     {
+        float paddingWRate = rate == 0 ? 0.45f : rate;
+        float paddingHRate = rate == 0 ? 0.45f : rate;
         var canvasSize = GeneratingTarget.gm.GetCanvasSize();
         ScreenWidth = canvasSize.x;
         ScreenHeight = canvasSize.y;

+ 12 - 11
Assets/InfraredProject/InfraredCamera/Scripts/ScreenLocate.cs

@@ -37,15 +37,16 @@ public partial class ScreenLocate : MonoBehaviour
         {
             var size = getUVCCameraInfoSize;
             Debug.Log("QuitScreenLocateManual Size:" + size);
-            screenIdentification?.SetScreenQuad(
-                new QuadrilateralInCamera(
-                    new o0.Geometry2D.Float.Vector(points[0].x * size.x, points[0].y * size.y),
-                    new o0.Geometry2D.Float.Vector(points[1].x * size.x, points[1].y * size.y),
-                    new o0.Geometry2D.Float.Vector(points[3].x * size.x, points[3].y * size.y),
-                    new o0.Geometry2D.Float.Vector(points[2].x * size.x, points[2].y * size.y),
-                    size.o0Vector()
-                )
-            );
+            var quad = new QuadrilateralInCamera(
+              new o0.Geometry2D.Float.Vector(points[0].x * size.x, points[0].y * size.y),
+              new o0.Geometry2D.Float.Vector(points[1].x * size.x, points[1].y * size.y),
+              new o0.Geometry2D.Float.Vector(points[3].x * size.x, points[3].y * size.y),
+              new o0.Geometry2D.Float.Vector(points[2].x * size.x, points[2].y * size.y),
+              size.o0Vector());
+
+            //screenIdentification?.SetScreenQuad(quad);
+            screenIdentification.QuadManual = quad;
+            Debug.Log($"[ScreenLocate] 记录手动数据: {quad}");
         }
         ToMode(Mode.InfraredLocate);
     }
@@ -76,8 +77,8 @@ public partial class ScreenLocate : MonoBehaviour
     public void EnterScreenLocateManualAuto()
     {
         //自动定位时候,清除一下记录的点
-        quadUnityVectorList.Clear();
-        InfraredCameraHelper?.InvokeOnUVCPosUpdate(quadUnityVectorList);
+        //quadUnityVectorList.Clear();
+        //InfraredCameraHelper?.InvokeOnUVCPosUpdate(quadUnityVectorList);
         BtnScreenLocate();
     }
     /// <summary>

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


+ 135 - 0
Assets/InfraredProject/WebCamera/Image/crosshair3.png.meta

@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: 88d562c7ed3bd1146891247666750802
+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: Server
+    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: 

+ 52 - 2
Assets/InfraredProject/WebCamera/Script/ZIM/DebugOnDemo.cs

@@ -1,20 +1,36 @@
-using System.Collections;
+using o0;
+using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
+using ZIM;
 
 public class DebugOnDemo : MonoBehaviour
 {
+    //InfraredSpot infrared;
+
     void Start()
     {
         StartCoroutine(OpenDebug());
+
+        //infrared = new InfraredSpot(new ZIM.Unity.ScreenMap(new ZIM.Unity.QuadrilateralInCamera(
+        //    new Vector2(0,0),
+        //    new Vector2(100,0),
+        //    new Vector2(0,100),
+        //    new Vector2(100,100),
+        //    new Vector2(100,100)
+        //    )), InfraredMatch.Match0);
     }
 
     IEnumerator OpenDebug()
     {
         yield return null;
         ScreenLocate.Main.DebugOnZIMDemo = true;
+# if UNITY_ANDROID
+        ScreenLocate.Main.SaveToggle.isOn = false;
+#else
         ScreenLocate.Main.SaveToggle.isOn = true;
-
+#endif
         ScreenLocate.Main.FullScreenToggle.gameObject.SetActive(true);
         ScreenLocate.Main.FullScreenToggle.onValueChanged.AddListener((i) =>
         {
@@ -23,11 +39,45 @@ public class DebugOnDemo : MonoBehaviour
         Application.targetFrameRate = 60;
     }
 
+
+
     void Update()
     {
         if ((Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) && Input.GetKeyDown(KeyCode.Return))
         {
             Screen.fullScreen = !Screen.fullScreen;
         }
+
+
+
+        //var matchedArea = new Dictionary<InfraredMatch, PixelSpotArea>() { { InfraredMatch.Match0, null } };
+        //var p0 = new Vector2(10, 10);
+        //var p1 = new Vector2(90, 90);
+        //List<PixelSpotArea> spotArea = new List<PixelSpotArea>() { 
+        //    new PixelSpotArea(p0, PixelSpotArea.GetGrid0(p0), PixelSpotArea.GetGrid1(p0)), 
+        //    new PixelSpotArea(p1, PixelSpotArea.GetGrid0(p1), PixelSpotArea.GetGrid1(p1)) };
+
+        //if (Input.GetKey(KeyCode.Z))
+        //{
+        //    spotArea[1].Join(new Vector2(92, 92));
+        //}
+
+        //var v0 = infrared.Verify(spotArea, matchedArea);
+
+        //if (v0)
+        //{
+
+        //}
+        //else
+        //{
+        //    if (spotArea.Count > 0)
+        //    {
+        //        matchedArea[InfraredMatch.Match0] = spotArea.Max((a, b) => a.Radius.CompareTo(b.Radius));
+        //    }
+        //}
+
+        //infrared.Update(matchedArea.FirstOrDefault().Value);
+
+        //Debug.Log(infrared.CameraLocation);
     }
 }

+ 9 - 3
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/InfraredSpot/InfraredSpot.cs

@@ -1,4 +1,5 @@
 using System.Collections.Generic;
+using System.Linq;
 using UnityEngine;
 using ZIM.Unity;
 using Color = UnityEngine.Color;
@@ -12,6 +13,11 @@ namespace ZIM
         static int MaxVerifyFailLimit = 20;
         public static float MinVerifyLength = 240;
 
+        public static void RefreshMinVerifyLength(o0.Geometry2D.Float.Vector cameraSize)
+        {
+            MinVerifyLength = (cameraSize.x + cameraSize.y) / 20;
+        }
+
         // 返回null代表没有点,范围在[0, 1]内
         public Vector2? ScreenUV
         {
@@ -56,7 +62,6 @@ namespace ZIM
         public InfraredSpot(ScreenMap screenMap, InfraredMatch match)
         {
             this.screenMap = screenMap;
-            MinVerifyLength = screenMap.UVSize.y / 6;
             Match = match;
             spots = new List<PixelSpotArea>();
             Reset();
@@ -81,12 +86,13 @@ namespace ZIM
             PixelSpotArea select = null;
             var minLength = float.MaxValue;
             var predict = Predict.Value;
+            var refPoint = (predict + spots.Last().Centroid) / 2;       // 用预测点和最后一个点的中点来判断是否追踪到
             foreach (var i in areas)
             {
-                var len = (i.Centroid - predict).magnitude;
+                var len = (i.Centroid - refPoint).magnitude;
                 if (len < MinVerifyLength)
                 {
-                    if (len < minLength)
+                    if (len < minLength)        // 找到追踪到的,并且距离最近的spot
                     {
                         select = i;
                         minLength = len;

+ 73 - 67
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenIdentification.cs

@@ -59,7 +59,7 @@ namespace o0.Project
         float areaPercent => locateArea[locateIndex].size.x;         // 当前白色区域的占比
         int areaSelected = -1;                                       // 选择哪个区域,顺序与Quadrilateral对应
         readonly List<float> sumTemp = new List<float>();
-        readonly List<OrdinalQuadrilateral> quadTemp = new List<OrdinalQuadrilateral>();
+        readonly List<QuadrilateralInCamera> quadTemp = new List<QuadrilateralInCamera>();
 
         //public ScreenIdentification(WebCamTexture texture)
         //{
@@ -87,6 +87,9 @@ namespace o0.Project
 
         public void SetScreenQuad(QuadrilateralInCamera quad) => Screen.QuadInCamera = quad;
 
+        // 上一次半自动识别的情况,false代表这条边识别失败,线段顺序: 下、右、上、左
+        public bool[] LastQuadSemiAutoState;
+
         public event Action OnLocateScreenEnter;
         public event Action OnLocateScreenEnd;
         public bool bStartLocateScreen { get; set; } = false;//是否进行捕获
@@ -103,6 +106,7 @@ namespace o0.Project
 
             if (target == null)
                 return false;
+            Debug.Log($"<color=aqua>[ScreenIdentification] 选择已识别到的屏幕({Enum.GetName(typeof(ScreenLocate.ScreenIdentificationTag), tag)}), {target}</color>");
             SetScreenQuad(target);
             return true;
         }
@@ -114,7 +118,7 @@ namespace o0.Project
             {
                 ScreenLocate.Main.CameraSize = new Geometry2D.Vector<int>(ScreenLocate.Main.DebugScreenImages[0].width, ScreenLocate.Main.DebugScreenImages[0].height);
                 DebugImage(ScreenLocate.Main.DebugScreenImages);
-                Screen.QuadInCamera = new QuadrilateralInCamera(quadTemp[0], new Vector(ScreenLocate.Main.DebugScreenImages[0].width, ScreenLocate.Main.DebugScreenImages[0].height));
+                Screen.QuadInCamera = quadTemp[0];
                 ScreenLocate.SetScreen(null);
                 ScreenLocate.Main.ShowScreen(ScreenLocate.Main.ScreenQuad, Screen.QuadInCamera);
                 delay = 0;
@@ -146,7 +150,8 @@ namespace o0.Project
         /// 初始化了两个数据 capture 和 delay
         /// </summary>
         /// <returns></returns>
-        public bool isInitLocateScreen() {
+        public bool isInitLocateScreen()
+        {
             return capture != 0 && delay != 0;
         }
 
@@ -162,37 +167,35 @@ namespace o0.Project
 #endif
             if (quadTemp.Count > 0)
             {
-                var quad = quadTemp[0];
-                ScreenLocate.Main.ShowScreen(ScreenLocate.Main.outputRawImages[4].transform.GetChild(0) as RectTransform,
-                    new QuadrilateralInCamera(quad, images[0].Size().o0Vector()));
+                ScreenLocate.Main.ShowScreen(ScreenLocate.Main.outputRawImages[4].transform.GetChild(0) as RectTransform, quadTemp[0]);
 
                 // 透视变换
-//                var srcWidth = LocateLightedRedTex.width;
-//                var transformWidth = (int)((quad.B.x - quad.A.x + quad.D.x - quad.C.x) / 2);
-//                var transformHeight = (int)((quad.C.y - quad.A.y + quad.D.y - quad.B.y) / 2);
-//                var transformTex = new Texture2D(transformWidth, transformHeight);
-//                var pt = new ZIMPerspectiveTransform(new OrdinalQuadrilateral(new Vector(0, 0), new Vector(transformWidth, 0), new Vector(0, transformHeight), new Vector(transformWidth, transformHeight)), quad);
-//                var dstPixel = new UnityEngine.Color[transformWidth * transformHeight];
-//                var srcPixel = LocateLightedRedTex.GetPixels();
-//                Parallel.For(0, transformWidth, (x) =>
-//                {
-//                    for (int y = 0; y < transformHeight; y++)
-//                    {
-//                        var index = y * transformWidth + x;
-//                        var sampleCoord = pt.TransformRound(x, y);
-//                        dstPixel[index] = srcPixel[sampleCoord.y * srcWidth + sampleCoord.x];
-//                    }
-//                });
-//                transformTex.SetPixels(dstPixel);
-//                transformTex.Apply();
-//                //ScreenLocate.DebugTexture(1, transformTex);
-//#if (!NDEBUG && DEBUG && ENABLE_LOG)
-//                Console.WriteLine($"{TAG} ScreenLocate.DebugTexture 1:{transformTex.GetNativeTexturePtr()}");
-//#endif
+                //                var srcWidth = LocateLightedRedTex.width;
+                //                var transformWidth = (int)((quad.B.x - quad.A.x + quad.D.x - quad.C.x) / 2);
+                //                var transformHeight = (int)((quad.C.y - quad.A.y + quad.D.y - quad.B.y) / 2);
+                //                var transformTex = new Texture2D(transformWidth, transformHeight);
+                //                var pt = new ZIMPerspectiveTransform(new OrdinalQuadrilateral(new Vector(0, 0), new Vector(transformWidth, 0), new Vector(0, transformHeight), new Vector(transformWidth, transformHeight)), quad);
+                //                var dstPixel = new UnityEngine.Color[transformWidth * transformHeight];
+                //                var srcPixel = LocateLightedRedTex.GetPixels();
+                //                Parallel.For(0, transformWidth, (x) =>
+                //                {
+                //                    for (int y = 0; y < transformHeight; y++)
+                //                    {
+                //                        var index = y * transformWidth + x;
+                //                        var sampleCoord = pt.TransformRound(x, y);
+                //                        dstPixel[index] = srcPixel[sampleCoord.y * srcWidth + sampleCoord.x];
+                //                    }
+                //                });
+                //                transformTex.SetPixels(dstPixel);
+                //                transformTex.Apply();
+                //                //ScreenLocate.DebugTexture(1, transformTex);
+                //#if (!NDEBUG && DEBUG && ENABLE_LOG)
+                //                Console.WriteLine($"{TAG} ScreenLocate.DebugTexture 1:{transformTex.GetNativeTexturePtr()}");
+                //#endif
             }
 
             //times.Add(watch.ElapsedMilliseconds);
-            //UnityEngine.Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
+            //Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
         }
 
         public void NextScreen()
@@ -315,8 +318,8 @@ namespace o0.Project
                 }
                 else if (quadTemp.Count == 1)
                 {
-                    Screen.QuadInCamera = new QuadrilateralInCamera(quadTemp[0], new Vector(Size.x, Size.y));
-                    Debug.Log($"<color=aqua>[ScreenIdentification] 拟合成功,Quad: {Screen.QuadInCamera.QuadString}____{Screen.QuadInCamera.SizeString}</color>");
+                    SetScreenQuad(quadTemp[0]);
+                    Debug.Log($"[ScreenIdentification] 拟合成功,识别数据: {Screen.QuadInCamera}");
                 }
                 else
                 {
@@ -331,7 +334,7 @@ namespace o0.Project
                     {
                         foreach (var q in quadTemp)
                         {
-                            baseVertex += q[areaSelected];
+                            baseVertex += q.Quad[areaSelected];
                         }
                         baseVertex /= quadTemp.Count;
                     }
@@ -347,15 +350,15 @@ namespace o0.Project
                             var yValue = new List<Vector>() { baseVertex };
                             foreach (var q in quadTemp)
                             {
-                                yValue.Add(q[i]);
+                                yValue.Add(q.Quad[i]);
                             }
                             var lr = LinerRegression1D.Fit(2, xValue.ToArray(), yValue.ToArray());
                             rs += lr.RSquared / 3;
                             predicts.Add(lr.Predict<Vector>(1));
                         }
                     }
-                    Screen.QuadInCamera = new QuadrilateralInCamera(predicts, new Vector(Size.x, Size.y));
-                    Debug.Log($"<color=aqua>[ScreenIdentification] 拟合成功,RSquared: {rs}, Quad: {Screen.QuadInCamera.QuadString}____{Screen.QuadInCamera.SizeString}</color>");
+                    SetScreenQuad(new QuadrilateralInCamera(predicts, new Vector(Size.x, Size.y)));
+                    Debug.Log($"[ScreenIdentification] 拟合成功,RSquared: {rs}, Quad: {Screen.QuadInCamera}");
                     //if (rs < 0.8) Screen.Quad = null;
                 }
 
@@ -375,7 +378,7 @@ namespace o0.Project
                 if (delay == 0)
                 {
                     ScreenLocate.Main.CameraSize = new Geometry2D.Vector<int>(cam.width, cam.height);          // 记录当前的分辨率
-                    Debug.Log("[ScreenIdentification] 采样纹理,分辨率: [" + Size.x + ", " + Size.y + "]");
+                    Debug.Log("[ScreenIdentification] 采样纹理,记录采样分辨率: [" + Size.x + ", " + Size.y + "]");
                 }
                 return true;
             }
@@ -560,7 +563,7 @@ namespace o0.Project
 
 
             times.Add(watch.ElapsedMilliseconds);
-            UnityEngine.Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
+            Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
 
             //ScreenLocate.DebugTexture(5, edge.IdentifyLine(edgeDir).ToTex());
             //ScreenLocate.DebugTexture(4, ScreenLocateTexLighted.Too0Mat().IdentifyEdgeGradientX().ToTex());
@@ -660,8 +663,6 @@ namespace o0.Project
         /// <param name="debugImages">这个参数如果不为null且数量大于0,则执行debug操作</param>
         void QuadrilateralFit(List<Texture2D> debugImages = null)
         {
-            // 如果有旧的手动数据,刷新一下Size
-            QuadManual?.ReSize(new Vector(Size.x, Size.y), ScreenMap.ViewAspectRatioSetting);
             // 屏幕黑白差值,存放多批次的图像用于识别, 该List数量不能等于 0 
             List<UnityEngine.Color[]> PixelsMultipleBatches = new List<UnityEngine.Color[]>();
 
@@ -669,7 +670,7 @@ namespace o0.Project
             sw.Start();
 
             //读取数据
-            if (debugImages != null && debugImages.Count != 0) 
+            if (debugImages != null && debugImages.Count != 0)
             {
                 foreach (var i in debugImages)
                 {
@@ -690,19 +691,19 @@ namespace o0.Project
                 var scale = 1.0f / maxWhite;        // 放大对比度
 
                 var differPixel = new UnityEngine.Color[Size.x * Size.y];
-                var whitePixel = new UnityEngine.Color[Size.x * Size.y];
+                //var whitePixel = new UnityEngine.Color[Size.x * Size.y];
                 Parallel.For(0, Size.x, x =>
                 {
-                    for (int y = 0; y < Size.y; y++) 
+                    for (int y = 0; y < Size.y; y++)
                     {
                         var i = y * Size.x + x;
                         var d = ScreenWhiteTexture[i] - ScreenBlackTexture[i];
                         differPixel[i] = new UnityEngine.Color(d.x, d.y, d.z) * scale;
-                        whitePixel[i] = new UnityEngine.Color(ScreenWhiteTexture[i].x, ScreenWhiteTexture[i].y, ScreenWhiteTexture[i].z) * scale;
+                        //whitePixel[i] = new UnityEngine.Color(ScreenWhiteTexture[i].x, ScreenWhiteTexture[i].y, ScreenWhiteTexture[i].z) * scale;
                     }
                 });
-                PixelsMultipleBatches.Add(differPixel);
-                PixelsMultipleBatches.Add(whitePixel);
+                PixelsMultipleBatches.Add(differPixel);     // 色差图
+                //PixelsMultipleBatches.Add(whitePixel);    // 原图
             }
 
             int conSize = (int)Math.Ceiling(0.007f * Size.y) * 2 + 1;
@@ -726,6 +727,8 @@ namespace o0.Project
             }
             Texture2D ScreenLocateTexture = LocateTexTemp[0];       // for output
 
+            // 如果有手动数据,刷新一下Size
+            QuadManual?.ReSize(new Vector(Size.x, Size.y), ScreenMap.ViewAspectRatioSetting);
             // 估算屏幕中点,如果已有手动定位数据,根据现有数据取平均即可,否则从色差计算,ScreenLocateMatList[0]默认是屏幕的黑白色差
             Vector AvgPoint = QuadManual != null ? QuadManual.Quad.Centroid : GetAvgPoint(ScreenLocateMatList[0]);
             // 过滤得到四边形的四条边,
@@ -754,7 +757,7 @@ namespace o0.Project
 
             #region 半自动识别
             List<LineIdentified> LineIdentifiedSemiAuto = new List<LineIdentified>();               // 线段顺序: 下、右、上、左
-            bool[] newLines = new bool[4] { true, true, true, true };
+            LastQuadSemiAutoState = new bool[4] { true, true, true, true };
             for (int i = 0; i < 4; i++)
             {
                 if (quadLinesSemiAuto[i] != null)
@@ -762,7 +765,7 @@ namespace o0.Project
                 else if (manualLines != null)
                 {
                     LineIdentifiedSemiAuto.Add(manualLines[i]);
-                    newLines[i] = false;
+                    LastQuadSemiAutoState[i] = false;
                 }
             }
 
@@ -781,17 +784,18 @@ namespace o0.Project
             // 优先应用半自动的结果(也可以在外部手动设置)
             if (QuadSemiAuto == null && QuadAuto == null && Screen.QuadInCamera != null)     // 如果可能,回退到上一个screen
             {
-                Debug.Log("<color=aqua>[ScreenIdentification] 本次识别失败,回退到上次的识别结果</color>");
-                quadTemp.Add(Screen.QuadInCamera.Quad);
+                Debug.Log($"<color=yellow>[ScreenIdentification] 本次识别失败,回退到上次的识别结果: {Screen.QuadInCamera}</color>");
+                quadTemp.Add(Screen.QuadInCamera);
             }
             else if (QuadSemiAuto != null)
             {
-                Debug.Log("<color=aqua>[ScreenIdentification] 识别到四边形</color>");
-                quadTemp.Add(QuadSemiAuto.Quad);
-            }else if (QuadAuto != null)
+                Debug.Log($"<color=aqua>[ScreenIdentification] 识别到四边形(半自动): {QuadSemiAuto}</color>");
+                quadTemp.Add(QuadSemiAuto);
+            }
+            else if (QuadAuto != null)
             {
-                Debug.Log("<color=aqua>[ScreenIdentification] 识别到四边形</color>");
-                quadTemp.Add(QuadAuto.Quad);
+                Debug.Log($"<color=aqua>[ScreenIdentification] 识别到四边形(全自动): {QuadAuto}</color>");
+                quadTemp.Add(QuadAuto);
             }
 
             #region 绘制 output texture
@@ -799,7 +803,7 @@ namespace o0.Project
             var ScreenQuadMap = new Matrix(Size, Tiling: true);     // 识别的到的屏幕四边形(半自动和自动在一张图上) 
             foreach (var i in LineIdentifiedSemiAuto.Index())
             {
-                if (newLines[i])
+                if (LastQuadSemiAutoState[i])
                     o0Extension.DrawLine(ScreenQuadMap, LineIdentifiedSemiAuto[i].DrawLine, (x, y) => 2, new Geometry2D.Float.Vector(0, 10));
                 else
                     o0Extension.DrawLine(ScreenQuadMap, LineIdentifiedSemiAuto[i].DrawLine, (x, y) => 1, new Geometry2D.Float.Vector(0, 6), true);
@@ -845,14 +849,14 @@ namespace o0.Project
             log += $"\r\n屏幕四边形_手动识别{QuadManual != null}\r\n屏幕四边形_半自动识别{QuadSemiAuto != null}\r\n屏幕四边形_全自动识别{QuadAuto != null}";
             Debug.Log(log);
             // 是否将图片保存到本地
-            if (ScreenLocate.Main.SaveToggle.isOn && ScreenLocate.Main.DebugOnZIMDemo)
+            if (ScreenLocate.Main.SaveToggle?.isOn ?? false && ScreenLocate.Main.DebugOnZIMDemo)
             {
                 var FileDirectory = $"Debug_屏幕定位/";
                 SaveImages(FileDirectory, log, ScreenLocateTexture, allLinesTex, ChoosableLineTex, ScreenQuad);
             }
 
             //times.Add(watch.ElapsedMilliseconds);
-            //UnityEngine.Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
+            //Debug.Log("time: " + (times[times.Count - 1] - times[times.Count - 2]));
 
             // opecncv处理, zim
             {
@@ -996,24 +1000,26 @@ namespace o0.Project
             var quadLinesSemiAuto = new List<(float, LineIdentified)>[4] { new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>() };
             var quadLinesAuto = new List<(float, LineIdentified)>[4] { new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>(), new List<(float, LineIdentified)>() };
             possibleLines = new List<LineIdentified>();
-            manualLines = null;
 
             // 如果已有手动定位数据,根据现有数据筛选线条(半自动)
+            manualLines = null;
             if (QuadManual != null)
             {
-                Debug.Log("[IdentifyLineLSD] 根据已有定位数据做筛选");
-                var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
+                Debug.Log($"[IdentifyLineLSD] 根据已有定位数据做筛选, QuadManual: {QuadManual}");
                 manualLines = QuadManual.GetLines().Select((i) => new LineIdentified(0, i, 0, 0, true)).ToArray();
-
-                var pedals = manualLines.Select((i) => o0Extension.PointPedal(i.Line, avgPoint, out _)).ToArray();     // 当前定位的垂足,下、右、上、左
+                var calibration = ScreenLocate.Main.ReDoLocateCalibrationRatio * Size.y;
+                var avgPointCross = manualLines.Select((i) => i.Line.LineCrossWithPoint(avgPoint)).ToArray();     // 对于平均点的corss值
+                var avgPointPedal = manualLines.Select((i) => o0Extension.PointPedal(i.Line, avgPoint, out _)).ToArray();     // 当前定位的垂足,下、右、上、左
 
                 foreach (var line in innerLines)
                 {
-                    // 筛选条件:1-梯度方向匹配,2-垂足的距离足够近, 3-新的线段的中点,到旧线段的垂足,要在旧线段内
+                    // 筛选条件:1-梯度方向匹配,2-垂足的距离足够近, 3-线段的AB点均在旧线段外部, 4-新的线段的中点,到旧线段的垂足,要在旧线段内
                     if (isScreenLine(line, out int index))
                     {
-                        var distanceToOld = (o0Extension.PointPedal(line.Line, avgPoint, out _) - pedals[index]).Length;
-                        if (distanceToOld < calibration)
+                        var distanceToOld = (o0Extension.PointPedal(line.Line, avgPoint, out _) - avgPointPedal[index]).Length;
+                        if (distanceToOld < calibration &&
+                            manualLines[index].Line.LineCrossWithPoint(line.Line.A) * avgPointCross[index] <= 0 &&
+                            manualLines[index].Line.LineCrossWithPoint(line.Line.B) * avgPointCross[index] <= 0)
                         {
                             var middleToOldLine = o0Extension.PointPedal(manualLines[index].Line, (line.Line.A + line.Line.B) / 2, out bool inLineSegment);
                             if (inLineSegment)
@@ -1029,7 +1035,7 @@ namespace o0.Project
             // 全自动
             foreach (var line in allLines)
             {
-                if (isScreenLine(line , out int index))
+                if (isScreenLine(line, out int index))
                 {
                     if (line.Batch < 1)     // 全自动只处理第一张图,默认是色差图
                     {
@@ -1050,7 +1056,7 @@ namespace o0.Project
             return (resultSemiAuto.ToList(), resultAuto.ToList());
         }
 
-        void SaveImages(string FileDirectory, string log, 
+        void SaveImages(string FileDirectory, string log,
             Texture2D ScreenLocateTex, Texture2D allLinesTex, Texture2D ChoosableLineTex, Texture2D ScreenQuadTex)
         {
             if (!Directory.Exists(FileDirectory))

+ 4 - 4
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenMap.cs

@@ -34,12 +34,12 @@ namespace ZIM.Unity
         }
 
         // 当分辨率不同时,刷新分辨率并返回true,否则返回false
-        public bool RefreshCameraSize(Vector2 curSize)
+        public bool RefreshCameraSize(Vector2 sizeNew) => RefreshCameraSize(sizeNew.o0Vector());
+        public bool RefreshCameraSize(Vector sizeNew)
         {
-            var sizeNew = curSize.o0Vector();
             if (QuadInCamera != null && QuadInCamera.CameraSize != sizeNew)
             {
-                UnityEngine.Debug.Log("[ScreenMap]根据分辨率映射: from " + QuadInCamera.SizeString + " to " + curSize);
+                Debug.Log($"[ScreenMap]根据分辨率映射: from {QuadInCamera.SizeString} to ({sizeNew.x}, {sizeNew.y})");
                 QuadInCamera.ReSize(sizeNew, ViewAspectRatioSetting);
                 InitByQuad();
                 return true;
@@ -59,7 +59,7 @@ namespace ZIM.Unity
 
                 var aabb = quad.AABBRect();
                 QuadRect = new Rect(aabb.Item1.x, aabb.Item1.y, aabb.Item2.x - aabb.Item1.x, aabb.Item2.y - aabb.Item1.y);
-                Debug.Log("Complete Screen Identification");
+                Debug.Log("[ScreenMap] 应用屏幕识别数据");
                 //Debug.Log("QuadRect:" + QuadRect);
 
                 Active = true;

+ 48 - 44
Assets/InfraredProject/WebCamera/Script/ZIM/Other/QuadrilateralInCamera.cs

@@ -38,7 +38,7 @@ namespace ZIM.Unity
         public QuadrilateralInCamera(IEnumerable<Vector2> enumable, Vector cameraSize)
         {
             CameraSize = cameraSize;
-            Quad = new OrdinalQuadrilateral(enumable.Select((i=>i.o0Vector())));
+            Quad = new OrdinalQuadrilateral(enumable.Select((i => i.o0Vector())));
         }
 
         public QuadrilateralInCamera(OrdinalQuadrilateral quad, Vector cameraSize)
@@ -49,6 +49,7 @@ namespace ZIM.Unity
 
         public string SizeString => $"({CameraSize.x}, {CameraSize.y})";
         public string QuadString => $"[({Quad.A.x}, {Quad.A.y}), ({Quad.B.x}, {Quad.B.y}), ({Quad.C.x}, {Quad.C.y}), ({Quad.D.x}, {Quad.D.y})]";
+        public override string ToString() => $"CameraSize: {SizeString}, Vertices: {QuadString}";
 
         // 需要标准化的坐标(即数值范围0-1)时使用,会自动根据当前的CameraSize转换
         private List<Vector> ScreenVertexListNormalized
@@ -92,50 +93,53 @@ namespace ZIM.Unity
         // 摄像机分辨率变化时调用
         public void ReSize(Vector sizeNew, AspectRatioSetting viewAspectRatioSetting)
         {
-            float ratio;
-            Func<Vector, Vector> Translate;
-            List<Vector> vertices;
-            switch (viewAspectRatioSetting)
+            if (CameraSize != sizeNew)
             {
-                case AspectRatioSetting.FixedAll:
-                    var scale = new Vector(sizeNew.x / CameraSize.x, sizeNew.y / CameraSize.y);
-                    CameraSize = sizeNew;
-                    for (int i = 0; i < Quad.Count; i++)
-                        Quad[i] *= scale;
-
-                    break;
-                case AspectRatioSetting.FixedHeight:
-                    var wOld = CameraSize.x / CameraSize.y;                // 宽度比高度
-                    var wNew = sizeNew.x / sizeNew.y;
-                    ratio = wOld / wNew;
-                    Translate = (v) =>
-                    {
-                        var x = v.x - 0.5f;
-                        return new Vector(x * ratio + 0.5f, v.y);
-                    };
-                    vertices = ScreenVertexListNormalized;
-                    for (int i = 0; i < vertices.Count; i++)
-                        vertices[i] = Translate(vertices[i]);
-                    CameraSize = sizeNew;                           // 这里要先设置Size
-                    ScreenVertexListNormalized = vertices;
-
-                    break;
-                case AspectRatioSetting.FixedWidth:
-                    var hOld = CameraSize.y / CameraSize.x;                // 高度比宽度
-                    var hNew = sizeNew.y / sizeNew.x;
-                    ratio = hOld / hNew;
-                    Translate = (v) =>
-                    {
-                        var y = v.y - 0.5f;
-                        return new Vector(v.x, y * ratio + 0.5f);
-                    };
-                    vertices = ScreenVertexListNormalized;
-                    for (int i = 0; i < vertices.Count; i++)
-                        vertices[i] = Translate(vertices[i]);
-                    CameraSize = sizeNew;
-                    ScreenVertexListNormalized = vertices;
-
-                    break;
+                float ratio;
+                Func<Vector, Vector> Translate;
+                List<Vector> vertices;
+                switch (viewAspectRatioSetting)
+                {
+                    case AspectRatioSetting.FixedAll:
+                        var scale = new Vector(sizeNew.x / CameraSize.x, sizeNew.y / CameraSize.y);
+                        CameraSize = sizeNew;
+                        for (int i = 0; i < Quad.Count; i++)
+                            Quad[i] *= scale;
+
+                        break;
+                    case AspectRatioSetting.FixedHeight:
+                        var wOld = CameraSize.x / CameraSize.y;                // 宽度比高度
+                        var wNew = sizeNew.x / sizeNew.y;
+                        ratio = wOld / wNew;
+                        Translate = (v) =>
+                        {
+                            var x = v.x - 0.5f;
+                            return new Vector(x * ratio + 0.5f, v.y);
+                        };
+                        vertices = ScreenVertexListNormalized;
+                        for (int i = 0; i < vertices.Count; i++)
+                            vertices[i] = Translate(vertices[i]);
+                        CameraSize = sizeNew;                           // 这里要先设置Size
+                        ScreenVertexListNormalized = vertices;
+
+                        break;
+                    case AspectRatioSetting.FixedWidth:
+                        var hOld = CameraSize.y / CameraSize.x;                // 高度比宽度
+                        var hNew = sizeNew.y / sizeNew.x;
+                        ratio = hOld / hNew;
+                        Translate = (v) =>
+                        {
+                            var y = v.y - 0.5f;
+                            return new Vector(v.x, y * ratio + 0.5f);
+                        };
+                        vertices = ScreenVertexListNormalized;
+                        for (int i = 0; i < vertices.Count; i++)
+                            vertices[i] = Translate(vertices[i]);
+                        CameraSize = sizeNew;
+                        ScreenVertexListNormalized = vertices;
+
+                        break;
+                }
             }
         }
 

+ 142 - 62
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -74,6 +74,12 @@ public partial class ScreenLocate : MonoBehaviour
     /// </summary>
     public bool SelectScreenAfterLocate(ScreenIdentificationTag tag) => ScreenIdentification.SelectScreenAfterLocate(tag);
 
+    /// <summary>
+    /// 上一次半自动识别的情况, 还未识别的时候数组是null
+    /// 通过索引获取布尔值,false代表这条边识别失败(回退应用了手动数据), 0-下、1-右、2-上、3-左
+    /// </summary>
+    public bool[] LastQuadSemiAutoState() => screenIdentification.LastQuadSemiAutoState;
+
     /// <summary>
     /// 获取算法执行过程中输出的纹理,0原图,1半自动识别到的全部线段,2屏幕黑白色差,3识别结果,4屏幕色差叠加识别结果,5半自动时的备选线段
     /// </summary>
@@ -97,8 +103,10 @@ public partial class ScreenLocate : MonoBehaviour
     private Texture mUVCTexture;
     public Texture getUVCTexture => mUVCTexture;
 
-    public Texture setUVCTexture { 
-        set {
+    public Texture setUVCTexture
+    {
+        set
+        {
             mUVCTexture = value;
         }
     }
@@ -136,10 +144,10 @@ public partial class ScreenLocate : MonoBehaviour
     //是否单点显示
     public bool bSinglePoint = true;//默认单点识别
 
-    [NonSerialized] public float ReDoLocateCalibrationRatio = 0.12f;  // 半自动定位时校准的距离比例,以手动的结果来校准,离手动太远的线段会被舍弃
-
     [NonSerialized] public InfraredCount infraredCount = InfraredCount.Single;  // 识别红外灯的数量,1个或者2个
 
+    public float ReDoLocateCalibrationRatio { get; private set; }  // 半自动定位时校准的距离比例,以手动的结果来校准,离手动太远的线段会被舍弃
+
     bool bIdentifyRed = true;//默认设备红色
 
     bool bIdentifyGreen = true;
@@ -190,7 +198,7 @@ public partial class ScreenLocate : MonoBehaviour
 
     [NonSerialized] public RectTransform BackQuad = null;
 
-    static public ScreenLocate Main;
+    static public ScreenLocate Main { get; private set; }
 
     static public void AutoLightPixels(Color[] pixels, int width, int height)
     {
@@ -280,6 +288,8 @@ public partial class ScreenLocate : MonoBehaviour
 
     void Awake()
     {
+        if (Main != null)
+            throw new Exception("[ScreenLocaer] 不允许多个实例");
         Main = this;
 
 #if !UNITY_EDITOR_WIN
@@ -311,6 +321,7 @@ public partial class ScreenLocate : MonoBehaviour
         }
 
         infraredCount = InfraredCount.Single;
+        ReDoLocateCalibrationRatio = 0.125f;
 
         #region 性能检测相关
         for (var i = 0; i < m_History.Capacity; ++i)
@@ -362,23 +373,34 @@ public partial class ScreenLocate : MonoBehaviour
     public void UVCUpdate(bool bChange)
     {
         mUVCTexture = mUVCCameraInfo.previewTexture;
-        Debug.Log("[ScreenLocate] UVCUpdate:" + mUVCCameraInfo + ",bChange:"+bChange);
+        Debug.Log("[ScreenLocate] UVCUpdate:" + mUVCCameraInfo + ",bChange:" + bChange);
         InfraredCameraHelper?.InvokeOnUVCIsUpdate();
 
         //这里判断是否进入自动识别?
-        if (bAutomaticRecognitionStart) {
+        if (bAutomaticRecognitionStart)
+        {
             bAutomaticRecognitionStart = false;
             Debug.Log("[ScreenLocate] UVCUpdate 开始自动识别 Capture:" + Capture + " ,Delay: " + Delay);
             screenIdentification.LocateScreen(Capture, Delay);
         }
 
-        if (bAutomaticRecognitionEnd) {
+        if (bAutomaticRecognitionEnd)
+        {
             bAutomaticRecognitionEnd = false;
             Debug.Log("[ScreenLocate] UVCUpdate 结束捕获,当前摄像机分辨率为: " + mUVCCameraInfo.Size);
             bAutomaticRecognition = false;
         }
     }
 
+    /// <summary>
+    /// 选择模式后更新 quadUnityVectorList
+    /// </summary>
+    public void UpdateQuadUnityVectorList()
+    {
+        quadUnityVectorList = screenIdentification.Screen.QuadInCamera.GetUnityVertexNormalizedList();
+        SaveScreenLocateVectorList();
+    }
+
     int brightness = 0;
     /// <summary>
     /// 设置算法红外灯的亮度值
@@ -414,49 +436,26 @@ public partial class ScreenLocate : MonoBehaviour
         {
             screenIdentification = new o0.Project.ScreenIdentification();
 
-            //pc 不切换分辨率了
-#if UNITY_ANDROID
+            Debug.Log("[ScreenLocate] 初始化屏幕识别");
             //screenIdentification.OnLocateScreenEnter += OnLocateScreenEnter;
             screenIdentification.OnLocateScreenEnd += OnLocateScreenEnd;
-#endif
-
         }
         if (infraredLocate == null)
         {
             infraredLocate = new InfraredLocate(mUVCCameraInfo, screenIdentification, InfraredSpotSettings, ScreenPixelCheaker);
+            CameraSize = new o0.Geometry2D.Vector<int>((int)getUVCCameraInfoSize.x, (int)getUVCCameraInfoSize.y);
+            InfraredSpot.RefreshMinVerifyLength(new o0.Geometry2D.Float.Vector(getUVCCameraInfoSize.x, getUVCCameraInfoSize.y));
+
+            Debug.Log($"[ScreenLocate] 初始化红外灯识别, 当前相机分辨率: {CameraSize.x}×{CameraSize.y},红外算法追踪距离: {InfraredSpot.MinVerifyLength}");
             //InfraredDemo 初始化
             //float redfilterValue = PlayerPrefs.GetFloat("Init redFilterSliderValue", 0.8f);
             //Debug.Log("Init Red filterValue:" + redfilterValue);
             //infraredLocate.SetBrightnessThreshold(redfilterValue);     // 参数是 红外灯的亮度阈值,阈值越小能够检测到的亮度就越低,默认值是0.93
         }
 
-        if (screenIdentification.Screen.RefreshCameraSize(getUVCCameraInfoSize))       // 同步分辨率, 分辨率变化后还需同步到InfraredDemo
-        {
-            quadUnityVectorList = screenIdentification.Screen.QuadInCamera.GetUnityVertexNormalizedList();
-
-            if (!ContainsNaN(quadUnityVectorList))
-            {
-                SaveScreenLocateVectorList();
-                //SyncInfraredDemo();
-                //SyncInfraredScreenPositioningView();
-                InfraredCameraHelper?.InvokeOnUVCPosUpdate(quadUnityVectorList);
-                Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变:[" + (int)getUVCCameraInfoSize.x + "," + (int)getUVCCameraInfoSize.y + "]");
-                Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变,刷新quadUnityVectorList:" + PrintVector2List(quadUnityVectorList));
-            }
-            else {
-                Debug.LogError("[ScreenLocate] RefreshCameraSize 屏幕size改变,存在NaN值,重新校准:" + PrintVector2List(quadUnityVectorList));
-            }
-         
-            if (DebugOnZIMDemo)
-                Main.ShowScreen(screenIdentification.Screen.QuadInCamera);
-
-        }
-
-        //var t0 = Time.realtimeSinceStartup;
-
         /* New*/
         //Debug.Log((mUVCCameraInfo != null) +" = "+ mUVCCameraInfo.IsPreviewing + " = "+ screenIdentification.Screen.Active);
-        if (mUVCCameraInfo != null && mUVCCameraInfo.IsPreviewing)     // 成功定位屏幕后才做红外识别
+        if (mUVCCameraInfo != null && mUVCCameraInfo.IsPreviewing)
         {
             //if (bAutomaticRecognition)
             //{
@@ -486,13 +485,42 @@ public partial class ScreenLocate : MonoBehaviour
             CreateUVCTexture2DIfNeeded((int)getUVCCameraInfoSize.x, (int)getUVCCameraInfoSize.y);
             if (!screenIdentification.Update(mUVCTexture2D))
             {
-                CameraSize = new o0.Geometry2D.Vector<int>(mUVCTexture2D.width, mUVCTexture2D.height);
+                // 同步分辨率, 分辨率变化后还需同步到InfraredDemo
+                if (RefreshCameraSize())
+                {
+                    if (screenIdentification.Screen.QuadInCamera != null)
+                    {
+                        quadUnityVectorList = screenIdentification.Screen.QuadInCamera.GetUnityVertexNormalizedList();
+
+                        if (!ContainsNaN(quadUnityVectorList))
+                        {
+                            SaveScreenLocateVectorList();
+                            //SyncInfraredDemo();
+                            //SyncInfraredScreenPositioningView();
+                            InfraredCameraHelper?.InvokeOnUVCPosUpdate(quadUnityVectorList);
+                            Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变:[" + (int)getUVCCameraInfoSize.x + "," + (int)getUVCCameraInfoSize.y + "]");
+                            Debug.Log("[ScreenLocate] RefreshCameraSize 屏幕size改变,刷新quadUnityVectorList:" + PrintVector2List(quadUnityVectorList));
+                        }
+                        else
+                        {
+                            Debug.LogError("[ScreenLocate] RefreshCameraSize 屏幕size改变,存在NaN值,重新校准:" + PrintVector2List(quadUnityVectorList));
+                        }
+                    }
+                    
+                    if (DebugOnZIMDemo)
+                        Main.ShowScreen(screenIdentification.Screen.QuadInCamera);
+                }
+
+                if (CameraSize.x != mUVCTexture2D.width || CameraSize.y != mUVCTexture2D.height)
+                {
+                    Debug.Log($"<color=red>[ScreenLocate] 分辨率不匹配,相机分辨率为: {getUVCCameraInfoSize}, mUVCTexture2D纹理尺寸: {mUVCTexture2D.width}×{mUVCTexture2D.height}</color>");
+                    return;
+                }
+
+                // 获取像素,用于后续操作
                 var pixels = mUVCTexture2D.GetPixels();       // 从左往右、从下往上
 
                 AutoLightPixels(pixels, CameraSize.x, CameraSize.y);
-                //return;
-                //InfraredSpots = infraredLocate.Update(pixels);
-
                 if (bSinglePoint)
                     infraredSpotBuffer = infraredLocate.UpdateSingle(pixels);
                 else
@@ -513,7 +541,7 @@ public partial class ScreenLocate : MonoBehaviour
                             CrosshairInCamera[i].gameObject.SetActive(false);
                     }
                 }
-                else if(mode == Mode.InfraredLocate)
+                else if (mode == Mode.InfraredLocate)
                 {
                     if (mPlatform == Platform.Window) //渲染ui上面的点。进入游戏可以隐藏
                     {
@@ -687,9 +715,39 @@ public partial class ScreenLocate : MonoBehaviour
         //}
         //UpdateInputs();
 
+        if (DebugOnZIMDemo)
+        {
+            if (Input.GetKeyDown(KeyCode.Z))
+                SelectScreenAfterLocate(ScreenIdentificationTag.Manual);
+            if (Input.GetKeyDown(KeyCode.X))
+                SelectScreenAfterLocate(ScreenIdentificationTag.SemiAuto);
+            if (Input.GetKeyDown(KeyCode.C))
+                SelectScreenAfterLocate(ScreenIdentificationTag.Auto);
+        }
+    }
 
+    private bool RefreshCameraSize()
+    {
+        var sizeNew = new o0.Geometry2D.Vector<int>((int)getUVCCameraInfoSize.x, (int)getUVCCameraInfoSize.y);
+        var sizeNewFloat = getUVCCameraInfoSize.o0Vector();
+        if (sizeNew != CameraSize || (screenIdentification?.Screen?.QuadInCamera != null && sizeNewFloat != screenIdentification.Screen.QuadInCamera.CameraSize)) 
+        {
+            Debug.Log($"<color=aqua>[ScreenLocate] 分辨率变化,刷新分辨率(from {CameraSize.x}×{CameraSize.y} to {sizeNew.x}×{sizeNew.y}), 是否有屏幕数据: {screenIdentification.Screen.QuadInCamera != null}, 是否有手动数据: {screenIdentification.QuadManual != null}</color>");
+            // 同步相机分辨率
+            CameraSize = sizeNew;
+            
+            screenIdentification.Screen.RefreshCameraSize(sizeNewFloat);
+            screenIdentification.QuadAuto?.ReSize(sizeNewFloat, ScreenMap.ViewAspectRatioSetting);
+            screenIdentification.QuadManual?.ReSize(sizeNewFloat, ScreenMap.ViewAspectRatioSetting);
+            screenIdentification.QuadSemiAuto?.ReSize(sizeNewFloat, ScreenMap.ViewAspectRatioSetting);
+
+            InfraredSpot.RefreshMinVerifyLength(sizeNewFloat);
+            return true;
+        }
+        return false;
     }
 
+
     Vector2 targetPos = Vector2.zero;
     Vector2 movePos = Vector2.zero;
     int moveSpeed = 20;
@@ -729,7 +787,7 @@ public partial class ScreenLocate : MonoBehaviour
     int Capture = 30;
     int Delay = 30;
     Vector2 EnterResolution;
-   // int DefaultResolutionIndex;
+    // int DefaultResolutionIndex;
 
     // readonly public int HighScreenLocateResolutionIndex = 2;       // 自动识别时,摄像机分辨率固定为1280 * 720 ( 对应索引是2 )
 
@@ -746,9 +804,10 @@ public partial class ScreenLocate : MonoBehaviour
         }
         //Debug.Log("BtnScreenLocate Capture:" + Capture + " ,Delay: " + Delay);
         //screenIdentification.LocateScreen(Capture, Delay);
+
         OnLocateScreenEnter();
     }
-   // bool log1 = false, log2 = false;
+    // bool log1 = false, log2 = false;
     public void OnLocateScreenEnter()
     {
         bAutomaticRecognition = true;
@@ -762,16 +821,18 @@ public partial class ScreenLocate : MonoBehaviour
         Vector2 _HighResolution = mUVCCameraInfo.CurrentCalibrationResolution; //最高的分辨率
         Resize((int)_HighResolution.x, (int)_HighResolution.y);
 
-        if (DebugOnZIMDemo)
-            screenIdentification.LocateScreen();
-
-#if  UNITY_EDITOR
-        UVCUpdate(false);
-#endif
-
         //CreateUVCTexture2DIfNeeded();
         // log1 = true;
         // log2 = true;
+
+        screenIdentification.LocateScreen();        // 自动识别开始的入口
+
+        if (DebugOnZIMDemo)
+        {
+            var webCam = GetComponent<ZIMWebCamera>();
+            webCam.AdjustResolution(1920, 1080);
+            mUVCCameraInfo.SetSize(webCam.webCamTexture.width, webCam.webCamTexture.height);
+        }
     }
 
     public void OnLocateScreenEnd()
@@ -780,6 +841,14 @@ public partial class ScreenLocate : MonoBehaviour
         // 记录本次屏幕识别的分辨率(目前采用高分辨率做识别,识别结束后调回低分辨率)
         //InfraredDemoMain?.SetResolutionNew(DefaultResolutionIndex);
         Resize((int)EnterResolution.x, (int)EnterResolution.y);
+
+        if (DebugOnZIMDemo)
+        {
+            var webCam = GetComponent<ZIMWebCamera>();
+            GetComponent<ZIMWebCamera>().AdjustResolution(160, 120);
+            mUVCCameraInfo.SetSize(webCam.webCamTexture.width, webCam.webCamTexture.height);
+        }
+
     }
 
     /**
@@ -795,14 +864,14 @@ public partial class ScreenLocate : MonoBehaviour
 #endif
 
 #if UNITY_STANDALONE_WIN
-       // pc todo 看看怎么处理
-       // ResizePC(width, height);
+        // pc todo 看看怎么处理
+        // ResizePC(width, height);
 #endif
 
         //mUVCCameraInfo.SetSize(width, height);      // 手动记录分辨率,这里可能会有问题 width和height是期望的分辨率而不是当前摄像机实际分辨率
-        Debug.Log($"[ScreenLocate] 开始修改分辨率 mUVCCameraInfo origin:[{ mUVCCameraInfo.CurrentWidth },{ mUVCCameraInfo.CurrentHeight }]=>target:[{ width },{ height }]");
+        Debug.Log($"[ScreenLocate] 开始修改分辨率 mUVCCameraInfo origin:[{mUVCCameraInfo.CurrentWidth},{mUVCCameraInfo.CurrentHeight}]=>target:[{width},{height}]");
 
-       // if (screenIdentification.isInitLocateScreen()) screenIdentification.bStartLocateScreen = true;
+        // if (screenIdentification.isInitLocateScreen()) screenIdentification.bStartLocateScreen = true;
     }
 
     /// <summary>
@@ -830,7 +899,7 @@ public partial class ScreenLocate : MonoBehaviour
         // Stop the current WebCamTexture
         _webCamTexture.Stop();
         // Trigger OnWebCamStopped event
-       // OnWebCamStopped?.Invoke();
+        // OnWebCamStopped?.Invoke();
         // Wait for a short time to ensure resources are released
         yield return new WaitForSeconds(0.5f);
         // Create a new WebCamTexture with the new dimensions
@@ -854,7 +923,7 @@ public partial class ScreenLocate : MonoBehaviour
         mUVCCameraInfo.SetSize(_webCamTexture.width, _webCamTexture.height);      // 手动记录分辨率,这里可能会有问题 width和height是期望的分辨率而不是当前摄像机实际分辨率
         Debug.Log("[ScreenLocate] ResizePc mUVCCameraInfo.SetSize: [" + mUVCCameraInfo.CurrentWidth + "," + mUVCCameraInfo.CurrentHeight + "]");
 
-       // if(screenIdentification.isInitLocateScreen())screenIdentification.bStartLocateScreen = true;
+        // if(screenIdentification.isInitLocateScreen())screenIdentification.bStartLocateScreen = true;
     }
     #endregion
     public void BtnScreenMap()
@@ -874,6 +943,14 @@ public partial class ScreenLocate : MonoBehaviour
         screenIdentification.Screen.Active = false;
     }
 
+    // threshold 的值是0-1,0代表最近,1代表最远
+    public void SetReDoLocateCalibrationRatio(float threshold)
+    {
+        const float MIN = 0.005f;
+        const float MAX = 0.305f;
+        ReDoLocateCalibrationRatio = MIN + (MAX - MIN) * threshold;
+    }
+
     /// <summary>
     /// 固定的顶点顺序: 左下,右下,左上,右上
     /// </summary>
@@ -975,7 +1052,7 @@ public partial class ScreenLocate : MonoBehaviour
     static public bool GetScreenLocateVectorList()
     {
         string posListStr = PlayerPrefs.GetString("ScreenLocateVectorList", "");
-        Debug.Log("GetScreenLocateVectorList:"+ posListStr);
+        Debug.Log("GetScreenLocateVectorList:" + posListStr);
         if (!string.IsNullOrWhiteSpace(posListStr))
         {
             quadUnityVectorList.Clear();
@@ -993,7 +1070,7 @@ public partial class ScreenLocate : MonoBehaviour
 
     }
 
-    public Vector2 AdjustPointsOffset(Vector2 inputPoint,string type = "CameraLocation")
+    public Vector2 AdjustPointsOffset(Vector2 inputPoint, string type = "CameraLocation")
     {
         // 计算从原始中心到输入点的偏移量
         if (type == "CameraLocation")
@@ -1001,7 +1078,8 @@ public partial class ScreenLocate : MonoBehaviour
             CameraLocationOffset = inputPoint - screenIdentification.Screen.TransformToCamera(new Vector2(0.5f, 0.5f) * screenIdentification.Screen.UVSize);
             return CameraLocationOffset;
         }
-        else {
+        else
+        {
             //ScreenUV
             UVOffset = inputPoint - new Vector2(0.5f, 0.5f);
             return UVOffset;
@@ -1010,7 +1088,8 @@ public partial class ScreenLocate : MonoBehaviour
     /// <summary>
     /// 重置偏移量
     /// </summary>
-    public void ResetPointsOffest() {
+    public void ResetPointsOffest()
+    {
         CameraLocationOffset = Vector2.zero;
         UVOffset = Vector2.zero;
     }
@@ -1020,7 +1099,8 @@ public partial class ScreenLocate : MonoBehaviour
     /// </summary>
     /// <param name="cameraLocatoin"></param>
     /// <returns></returns>
-    public Vector2 GetOffsetCameraLocation(Vector2 cameraLocatoin) {
+    public Vector2 GetOffsetCameraLocation(Vector2 cameraLocatoin)
+    {
         return cameraLocatoin - CameraLocationOffset;
     }
 

+ 9 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/ZIMUnity/ZIMMath.cs

@@ -28,5 +28,14 @@ namespace ZIM.Unity
 
         public static float LengthManhattan(this Vector2 v) => Math.Abs(v.x) + Math.Abs(v.y);
         public static double LengthManhattan(Vector2 v1, Vector2 v2) => (v1 - v2).LengthManhattan();
+
+        // 可以用于判断点位V于直线AB哪一侧
+        // return的值 等于0: 点在线上,大于0: 三角形ABV是逆时针,小于0: 三角形ABV是顺时针 (注:Line的构造函数会修改AB的顺序)
+        public static float LineCrossWithPoint(this Line l, Vector v)
+        {
+            var ld = l.B - l.A;
+            var vd = v - l.A;
+            return ld.x * vd.y - ld.y * vd.x;
+        }
     }
 }

+ 8 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/ZIMUnity/ZIMWebCamera.cs

@@ -65,6 +65,14 @@ public class ZIMWebCamera : MonoBehaviour
         return y * width + x;
     }
 
+    public void AdjustResolution(int width, int height)
+    {
+        _webCamTexture.Stop();
+        _webCamTexture = new WebCamTexture(_webCamTexture.deviceName, width, height);
+        _webCamTexture.Play();
+        Debug.Log("[ZIMWebCamera] 分辨率调整: " + _webCamTexture.width + "×" + _webCamTexture.height);
+    }
+
     public void OnClick_Open()
     {
 

+ 207 - 31
Assets/InfraredProject/WebCamera/zimWebCamera.unity

@@ -305,7 +305,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 14
+  m_RootOrder: 13
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -1065,7 +1065,7 @@ RectTransform:
   m_Children:
   - {fileID: 1039630091}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 10
+  m_RootOrder: 9
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -1180,7 +1180,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 18
+  m_RootOrder: 17
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -1291,19 +1291,19 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 517576267}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  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: 1731784227}
   - {fileID: 619252550}
-  m_Father: {fileID: 1867793102}
-  m_RootOrder: 2
+  m_Father: {fileID: 588275179}
+  m_RootOrder: 1
   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: -90, y: 564}
+  m_AnchoredPosition: {x: -90, y: 566}
   m_SizeDelta: {x: 160, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &517576269
@@ -1385,7 +1385,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 13
+  m_RootOrder: 12
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
@@ -1568,6 +1568,45 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 577700187}
   m_CullTransparentMesh: 1
+--- !u!1 &588275178
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 588275179}
+  m_Layer: 5
+  m_Name: Settings
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &588275179
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 588275178}
+  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: 601288812}
+  - {fileID: 517576268}
+  - {fileID: 1812960952}
+  m_Father: {fileID: 1867793102}
+  m_RootOrder: 1
+  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: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &601288811
 GameObject:
   m_ObjectHideFlags: 0
@@ -1592,19 +1631,19 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 601288811}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  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: 1190139017}
   - {fileID: 1120077961}
-  m_Father: {fileID: 1867793102}
-  m_RootOrder: 1
+  m_Father: {fileID: 588275179}
+  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: -90, y: 502.99994}
+  m_AnchoredPosition: {x: -90, y: 515}
   m_SizeDelta: {x: 160, y: 20}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &601288813
@@ -1846,7 +1885,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 20
+  m_RootOrder: 19
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -2015,7 +2054,7 @@ RectTransform:
   - {fileID: 1740452459998223283}
   - {fileID: 500784416}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 5
+  m_RootOrder: 4
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -2210,7 +2249,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 19
+  m_RootOrder: 18
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
@@ -2418,7 +2457,7 @@ RectTransform:
   - {fileID: 1092870242}
   - {fileID: 1728164016}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 16
+  m_RootOrder: 15
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -3389,7 +3428,7 @@ RectTransform:
   - {fileID: 713242658}
   - {fileID: 1811249278}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 9
+  m_RootOrder: 8
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -3596,7 +3635,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 11
+  m_RootOrder: 10
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -4010,7 +4049,7 @@ RectTransform:
   m_Children:
   - {fileID: 1688891193}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 8
+  m_RootOrder: 7
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -4081,7 +4120,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 15
+  m_RootOrder: 14
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -4509,7 +4548,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 17
+  m_RootOrder: 16
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
@@ -5165,7 +5204,7 @@ RectTransform:
   - {fileID: 147698546}
   - {fileID: 1142717919}
   m_Father: {fileID: 1867793102}
-  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: 0}
@@ -5351,6 +5390,11 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1811249277}
   m_CullTransparentMesh: 1
+--- !u!224 &1812960952 stripped
+RectTransform:
+  m_CorrespondingSourceObject: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+  m_PrefabInstance: {fileID: 2414034270426155791}
+  m_PrefabAsset: {fileID: 0}
 --- !u!1 &1819346505
 GameObject:
   m_ObjectHideFlags: 0
@@ -5520,8 +5564,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 394028722}
-  - {fileID: 601288812}
-  - {fileID: 517576268}
+  - {fileID: 588275179}
   - {fileID: 1801784546}
   - {fileID: 1946863619}
   - {fileID: 682249273}
@@ -5562,8 +5605,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   cameraIndex: 0
-  width: 1080
-  height: 720
+  width: 100
+  height: 100
   fps: 30
   rawImage: {fileID: 2101632897}
   rawImageSize: {fileID: 681002959}
@@ -5712,7 +5755,7 @@ RectTransform:
   - {fileID: 228594326}
   - {fileID: 1289810228}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 4
+  m_RootOrder: 3
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
@@ -5861,7 +5904,7 @@ RectTransform:
   m_Children:
   - {fileID: 1220810728}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 7
+  m_RootOrder: 6
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -5941,7 +5984,7 @@ RectTransform:
   - {fileID: 1765021459}
   - {fileID: 1337472477}
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 6
+  m_RootOrder: 5
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -6020,6 +6063,135 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1001 &2414034270426155791
+PrefabInstance:
+  m_ObjectHideFlags: 0
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 588275179}
+    m_Modifications:
+    - target: {fileID: 2414034268525707325, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_Value
+      value: 0.4
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268525707325, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_MinValue
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268525707325, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_Pivot.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_Pivot.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_RootOrder
+      value: 2
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMin.y
+      value: 0.5
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_SizeDelta.y
+      value: 100
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchoredPosition.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336503, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_LocalEulerAnglesHint.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268613336504, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_Name
+      value: SliderSetting
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268628162293, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268628162293, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034268628162293, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMin.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034269388536352, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2414034269388536352, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
+      propertyPath: m_AnchorMax.y
+      value: 0
+      objectReference: {fileID: 0}
+    m_RemovedComponents: []
+  m_SourcePrefab: {fileID: 100100000, guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0, type: 3}
 --- !u!114 &2452220216917731427
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -6071,7 +6243,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 1867793102}
-  m_RootOrder: 12
+  m_RootOrder: 11
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -6161,6 +6333,10 @@ PrefabInstance:
   m_Modification:
     m_TransformParent: {fileID: 1867793102}
     m_Modifications:
+    - target: {fileID: 5607599880370664560, guid: 742f117969807f147b562a0be2d52864, type: 3}
+      propertyPath: m_Enabled
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 7518895720434693104, guid: 742f117969807f147b562a0be2d52864, type: 3}
       propertyPath: m_IsActive
       value: 1
@@ -6179,7 +6355,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 7518895720462305555, guid: 742f117969807f147b562a0be2d52864, type: 3}
       propertyPath: m_RootOrder
-      value: 21
+      value: 22
       objectReference: {fileID: 0}
     - target: {fileID: 7518895720462305555, guid: 742f117969807f147b562a0be2d52864, type: 3}
       propertyPath: m_AnchorMax.x

BIN
Assets/Plugins/Android/libuvccamera.aar


+ 3 - 0
Assets/SmartBow/Resources/Common/BulletManager.prefab

@@ -141,6 +141,8 @@ MonoBehaviour:
   emptyBulletSprite: {fileID: 21300000, guid: 434fe1c3dda4d2b4eb8da12815e1622d, type: 3}
   defaultBulletCount: 15
   parent: {fileID: 0}
+  bCenter: 0
+  bulletTipColor: {r: 1, g: 0.105882354, b: 0.18039216, a: 1}
 --- !u!1 &1876679421156954069
 GameObject:
   m_ObjectHideFlags: 0
@@ -198,6 +200,7 @@ Canvas:
   m_OverrideSorting: 0
   m_OverridePixelPerfect: 0
   m_SortingBucketNormalizedSize: 0
+  m_VertexColorAlwaysGammaSpace: 0
   m_AdditionalShaderChannelsFlag: 0
   m_SortingLayerID: 0
   m_SortingOrder: 0

+ 1 - 0
Assets/SmartBow/Resources/Common/BulletManager_Fruit.prefab

@@ -1180,6 +1180,7 @@ MonoBehaviour:
   defaultBulletCount: 15
   parent: {fileID: 0}
   bCenter: 1
+  bulletTipColor: {r: 0.9427508, g: 1, b: 0, a: 1}
 --- !u!1 &4303088161959514138
 GameObject:
   m_ObjectHideFlags: 0

+ 80 - 2
Assets/SmartBow/Resources/Common/TipBulletNumber.prefab

@@ -33,7 +33,7 @@ RectTransform:
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 783234584897278844}
-  m_RootOrder: 0
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -81,7 +81,7 @@ MonoBehaviour:
     m_HorizontalOverflow: 1
     m_VerticalOverflow: 1
     m_LineSpacing: 1
-  m_Text: "\u8BF7\u66F4\u6362\u5F39\u5939\uFF01"
+  m_Text: "\u8BF7\u66F4\u6362\u5F39\u5939!"
 --- !u!114 &1424465692820929678
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -141,6 +141,7 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
+  - {fileID: 5018797254567088007}
   - {fileID: 4955470051127942227}
   m_Father: {fileID: 0}
   m_RootOrder: 0
@@ -162,3 +163,80 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 4b4405f9ab2064e47addd87c8501c043, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+  outText: {fileID: 1925971231763318881}
+--- !u!1 &6651814312560335489
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5018797254567088007}
+  - component: {fileID: 373780732306767150}
+  - component: {fileID: 728062842645233407}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5018797254567088007
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6651814312560335489}
+  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: 783234584897278844}
+  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.000076293945, y: 0}
+  m_SizeDelta: {x: 348.18, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &373780732306767150
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6651814312560335489}
+  m_CullTransparentMesh: 1
+--- !u!114 &728062842645233407
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6651814312560335489}
+  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.14150941, g: 0.14150941, b: 0.14150941, a: 0.4509804}
+  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: f36c1bb525caeaf419a4b369bb1855f9, 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

+ 260 - 6
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/GameResultView.prefab

@@ -1,5 +1,101 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &134641336044343435
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5452515904295207473}
+  - component: {fileID: 8376281510790726691}
+  - component: {fileID: 554309415406172468}
+  - component: {fileID: 8679520816117396099}
+  m_Layer: 5
+  m_Name: Label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5452515904295207473
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 134641336044343435}
+  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: 8481870442611658209}
+  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: 211.235, y: -65.50004}
+  m_SizeDelta: {x: 268, y: 38}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &8376281510790726691
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 134641336044343435}
+  m_CullTransparentMesh: 1
+--- !u!114 &554309415406172468
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 134641336044343435}
+  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.29803923, g: 0.6, b: 0.64705884, 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: 40
+    m_FontStyle: 1
+    m_BestFit: 0
+    m_MinSize: 0
+    m_MaxSize: 60
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: Shooting
+--- !u!114 &8679520816117396099
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 134641336044343435}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: Result-GunShootingLabel
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &740427088997581663
 GameObject:
   m_ObjectHideFlags: 0
@@ -296,8 +392,8 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 8838701306199674634}
-  - {fileID: 3130687873644734345}
+  - {fileID: 8481870442611658209}
+  - {fileID: 2961237337708011297}
   - {fileID: 4593149041160737508}
   - {fileID: 5292821861522373025}
   m_Father: {fileID: 2809629714688895086}
@@ -714,6 +810,7 @@ MonoBehaviour:
   languageFontSizes:
   - language: 0
     fontSize: 40
+    lineSpacing: 0
 --- !u!1 &2619685929738768010
 GameObject:
   m_ObjectHideFlags: 0
@@ -990,6 +1087,44 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: 99
+--- !u!1 &3755556060352257080
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2961237337708011297}
+  m_Layer: 5
+  m_Name: Arrow
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2961237337708011297
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3755556060352257080}
+  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: 8838701306199674634}
+  - {fileID: 3130687873644734345}
+  m_Father: {fileID: 7422063681481786385}
+  m_RootOrder: 1
+  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: -463.6175, y: 14}
+  m_SizeDelta: {x: 345.235, y: 120}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &3935534455783173961
 GameObject:
   m_ObjectHideFlags: 0
@@ -1146,6 +1281,44 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: 99
+--- !u!1 &4192631324987512564
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8481870442611658209}
+  m_Layer: 5
+  m_Name: Gun
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &8481870442611658209
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4192631324987512564}
+  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: 7202494670030962919}
+  - {fileID: 5452515904295207473}
+  m_Father: {fileID: 7422063681481786385}
+  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: -463.61755, y: 14.000056}
+  m_SizeDelta: {x: 345.235, y: 120}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &4528185496924833269
 GameObject:
   m_ObjectHideFlags: 0
@@ -1244,6 +1417,7 @@ MonoBehaviour:
   languageFontSizes:
   - language: 0
     fontSize: 40
+    lineSpacing: 0
 --- !u!1 &4760708073854113132
 GameObject:
   m_ObjectHideFlags: 0
@@ -1320,6 +1494,82 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
+--- !u!1 &5301769908203875732
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7202494670030962919}
+  - component: {fileID: 4309197393574045330}
+  - component: {fileID: 505653583509952894}
+  m_Layer: 0
+  m_Name: Sprite
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7202494670030962919
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5301769908203875732}
+  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: 1
+  m_Children: []
+  m_Father: {fileID: 8481870442611658209}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 44.9, y: 0.0000371933}
+  m_SizeDelta: {x: 157.4, y: 93.9}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &4309197393574045330
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5301769908203875732}
+  m_CullTransparentMesh: 0
+--- !u!114 &505653583509952894
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5301769908203875732}
+  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: 0
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 4eae180ce588f9f4f9dcb112bc5fedf0, type: 3}
+  m_Type: 0
+  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!1 &5675532061170472807
 GameObject:
   m_ObjectHideFlags: 0
@@ -1418,6 +1668,7 @@ MonoBehaviour:
   languageFontSizes:
   - language: 0
     fontSize: 40
+    lineSpacing: 0
 --- !u!1 &5848904792596831284
 GameObject:
   m_ObjectHideFlags: 0
@@ -1589,12 +1840,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 7422063681481786385}
+  m_Father: {fileID: 2961237337708011297}
   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: 175, y: -63}
+  m_AnchoredPosition: {x: 211.235, y: -65.50004}
   m_SizeDelta: {x: 268, y: 38}
   m_Pivot: {x: 0, y: 0.5}
 --- !u!222 &7558708267559338090
@@ -1765,6 +2016,7 @@ Canvas:
   m_OverrideSorting: 0
   m_OverridePixelPerfect: 0
   m_SortingBucketNormalizedSize: 0
+  m_VertexColorAlwaysGammaSpace: 0
   m_AdditionalShaderChannelsFlag: 0
   m_SortingLayerID: 0
   m_SortingOrder: 999
@@ -1827,6 +2079,8 @@ MonoBehaviour:
   second: {fileID: 7687407921770429057}
   shootCount: {fileID: 938660518603459634}
   calories: {fileID: 4298324856390495813}
+  ArrowInfo: {fileID: 3755556060352257080}
+  GunInfo: {fileID: 4192631324987512564}
 --- !u!1 &7060471198707933193
 GameObject:
   m_ObjectHideFlags: 0
@@ -2597,12 +2851,12 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 7422063681481786385}
+  m_Father: {fileID: 2961237337708011297}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0.5}
   m_AnchorMax: {x: 0, y: 0.5}
-  m_AnchoredPosition: {x: 25, y: 14}
+  m_AnchoredPosition: {x: 61.234997, y: 0.0000371933}
   m_SizeDelta: {x: 122.47, y: 120}
   m_Pivot: {x: 0, y: 0.5}
 --- !u!222 &2529603610027308900

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 4896 - 144
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredScreenPositioningView.prefab


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 1620 - 195
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/InfraredView.prefab


+ 79 - 2
Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/CameraMask.prefab

@@ -1,5 +1,81 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2541721496078628373
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 809514187041191352}
+  - component: {fileID: 2665637017948600618}
+  - component: {fileID: 8564932494647438511}
+  m_Layer: 5
+  m_Name: Panel
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &809514187041191352
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2541721496078628373}
+  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: 7518895720462305555}
+  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!222 &2665637017948600618
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2541721496078628373}
+  m_CullTransparentMesh: 1
+--- !u!114 &8564932494647438511
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2541721496078628373}
+  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: 0.392}
+  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: 1d8b663a5a058554baf08e1080e214f2, type: 3}
+  m_Type: 0
+  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!1 &5607599880370664563
 GameObject:
   m_ObjectHideFlags: 0
@@ -28,7 +104,7 @@ RectTransform:
   m_GameObject: {fileID: 5607599880370664563}
   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_LocalScale: {x: 1.207, y: 1.15, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 7518895720462305555}
@@ -116,7 +192,7 @@ RectTransform:
   m_GameObject: {fileID: 7518895720434693104}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 0.818, y: 0.843, z: 0.5}
+  m_LocalScale: {x: 1.21, y: 1.15, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 7518895720462305555}
@@ -157,6 +233,7 @@ RectTransform:
   m_Children:
   - {fileID: 5607599880370664562}
   - {fileID: 7518895720434693105}
+  - {fileID: 809514187041191352}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 13 - 13
Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/PixelCheaker.cs

@@ -19,24 +19,24 @@ public class PixelCheaker : MonoBehaviour
 
     private Vector2 ellipseRadius;
 
-    public bool OutArea2D(Vector2 pixelPosition, Vector<int> imageSize, out float f) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y), out f);
-    public bool OutArea2D(Vector2 pixelPosition, Vector2 imageSize, out float f) => OutArea2D(pixelPosition / imageSize, out f);
-    public bool OutArea2D(o0.Geometry2D.Float.Vector pixelPosition, Vector<int> imageSize, out float f) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y), out f);
+    //public bool OutArea2D(Vector2 pixelPosition, Vector<int> imageSize, out float f) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y), out f);
+    //public bool OutArea2D(Vector2 pixelPosition, Vector2 imageSize, out float f) => OutArea2D(pixelPosition / imageSize, out f);
+    //public bool OutArea2D(o0.Geometry2D.Float.Vector pixelPosition, Vector<int> imageSize, out float f) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y), out f);
     public bool OutArea2D(Vector2 pixelPosition, Vector<int> imageSize) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y));
     public bool OutArea2D(Vector2 pixelPosition, Vector2 imageSize) => OutArea2D(pixelPosition / imageSize);
     public bool OutArea2D(o0.Geometry2D.Float.Vector pixelPosition, Vector<int> imageSize) => OutArea2D(new Vector2(pixelPosition.x / imageSize.x, pixelPosition.y / imageSize.y));
 
     // out 椭圆的距离系数,越大表示离椭圆越远
-    private bool OutArea2D(Vector2 pixelUV, out float f)
-    {
-        Vector2 center = new Vector2(0.5f, 0.5f);           // 椭圆中心
-        float normalizedX = (pixelUV.x - center.x) / ellipseRadius.x;
-        float normalizedY = (pixelUV.y - center.y) / ellipseRadius.y;
-
-        float value = (normalizedX * normalizedX) + (normalizedY * normalizedY);    // 使用椭圆方程判断
-        f = (float)Math.Sqrt(value);
-        return value > 1.0f;
-    }
+    //private bool OutArea2D(Vector2 pixelUV, out float f)
+    //{
+    //    Vector2 center = new Vector2(0.5f, 0.5f);           // 椭圆中心
+    //    float normalizedX = (pixelUV.x - center.x) / ellipseRadius.x;
+    //    float normalizedY = (pixelUV.y - center.y) / ellipseRadius.y;
+
+    //    float value = (normalizedX * normalizedX) + (normalizedY * normalizedY);    // 使用椭圆方程判断
+    //    f = (float)Math.Sqrt(value);
+    //    return value > 1.0f;
+    //}
 
     // 无out的版本
     private bool OutArea2D(Vector2 pixelUV)

+ 783 - 0
Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/SliderSetting.prefab

@@ -0,0 +1,783 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2414034268367587162
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034268367587161}
+  - component: {fileID: 2414034268367587159}
+  - component: {fileID: 2414034268367587160}
+  m_Layer: 5
+  m_Name: Label (2)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034268367587161
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268367587162}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2414034268613336503}
+  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: 233.9, y: 256.05}
+  m_SizeDelta: {x: 46.01001, y: -44.820007}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034268367587159
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268367587162}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034268367587160
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268367587162}
+  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: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 32
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u8FDC"
+--- !u!1 &2414034268525707327
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034268525707326}
+  - component: {fileID: 2414034268525707325}
+  - component: {fileID: 2414034268525707324}
+  m_Layer: 5
+  m_Name: Slider
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034268525707326
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268525707327}
+  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: 2414034270073626357}
+  - {fileID: 2414034269964765705}
+  - {fileID: 2414034270371963219}
+  m_Father: {fileID: 2414034268613336503}
+  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: 135, y: 279}
+  m_SizeDelta: {x: 160, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2414034268525707325
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268525707327}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, 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: 2414034268628162292}
+  m_FillRect: {fileID: 2414034269388536352}
+  m_HandleRect: {fileID: 2414034268628162293}
+  m_Direction: 0
+  m_MinValue: 0
+  m_MaxValue: 1
+  m_WholeNumbers: 0
+  m_Value: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 2414034268525707324}
+        m_TargetAssemblyTypeName: SliderWithValue, Assembly-CSharp
+        m_MethodName: UpdateValueText
+        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!114 &2414034268525707324
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268525707327}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 96c4ec327f7b3504f9876d6d4edc9bd7, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  Sliderr: {fileID: 2414034268525707325}
+  ValueText: {fileID: 2414034269652029113}
+--- !u!1 &2414034268613336504
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034268613336503}
+  m_Layer: 5
+  m_Name: SliderSetting
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034268613336503
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268613336504}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 2, y: 2, z: 2}
+  m_ConstrainProportionsScale: 1
+  m_Children:
+  - {fileID: 2414034268525707326}
+  - {fileID: 2414034269175826665}
+  - {fileID: 2414034268367587161}
+  - {fileID: 2414034269652029114}
+  - {fileID: 2414034268632256255}
+  m_Father: {fileID: 0}
+  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: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &2414034268628162294
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034268628162293}
+  - component: {fileID: 2414034268628162291}
+  - component: {fileID: 2414034268628162292}
+  m_Layer: 5
+  m_Name: Handle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034268628162293
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268628162294}
+  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: 2414034270371963219}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034268628162291
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268628162294}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034268628162292
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268628162294}
+  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: 10913, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 0
+  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!1 &2414034268632256224
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034268632256255}
+  - component: {fileID: 2414034268632256253}
+  - component: {fileID: 2414034268632256254}
+  m_Layer: 5
+  m_Name: Label (4)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034268632256255
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268632256224}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2414034268613336503}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 304.6, y: 270.8}
+  m_SizeDelta: {x: 239.0972, y: -3.6339}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034268632256253
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268632256224}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034268632256254
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034268632256224}
+  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: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 32
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u534A\u81EA\u52A8\u8BC6\u522B\u7684\u7EBF\u6BB5\u8DDD\u624B\u52A8\u6807\u8BB0\u7684\u5141\u8BB8\u8DDD\u79BB"
+--- !u!1 &2414034269175826666
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034269175826665}
+  - component: {fileID: 2414034269175826663}
+  - component: {fileID: 2414034269175826664}
+  m_Layer: 5
+  m_Name: Label (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034269175826665
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269175826666}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2414034268613336503}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 92.6, y: 254.9}
+  m_SizeDelta: {x: 46.01001, y: -42.52002}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034269175826663
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269175826666}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034269175826664
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269175826666}
+  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: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 32
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u8FD1"
+--- !u!1 &2414034269388536353
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034269388536352}
+  - component: {fileID: 2414034269388536382}
+  - component: {fileID: 2414034269388536383}
+  m_Layer: 5
+  m_Name: Fill
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034269388536352
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269388536353}
+  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: 2414034269964765705}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 10, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034269388536382
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269388536353}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034269388536383
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269388536353}
+  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!1 &2414034269652029115
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034269652029114}
+  - component: {fileID: 2414034269652029112}
+  - component: {fileID: 2414034269652029113}
+  m_Layer: 5
+  m_Name: Label (3)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034269652029114
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269652029115}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2414034268613336503}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 152.1, y: 256.5}
+  m_SizeDelta: {x: 46.01001, y: -42.040005}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034269652029112
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269652029115}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034269652029113
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269652029115}
+  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: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 32
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 2
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: value
+--- !u!1 &2414034269964765706
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034269964765705}
+  m_Layer: 5
+  m_Name: Fill Area
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034269964765705
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034269964765706}
+  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: 2414034269388536352}
+  m_Father: {fileID: 2414034268525707326}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.25}
+  m_AnchorMax: {x: 1, y: 0.75}
+  m_AnchoredPosition: {x: -5, y: 0}
+  m_SizeDelta: {x: -20, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &2414034270073626358
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034270073626357}
+  - component: {fileID: 2414034270073626355}
+  - component: {fileID: 2414034270073626356}
+  m_Layer: 5
+  m_Name: Background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034270073626357
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034270073626358}
+  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: 2414034268525707326}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.25}
+  m_AnchorMax: {x: 1, y: 0.75}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2414034270073626355
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034270073626358}
+  m_CullTransparentMesh: 1
+--- !u!114 &2414034270073626356
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034270073626358}
+  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: 10907, 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!1 &2414034270371963220
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2414034270371963219}
+  m_Layer: 5
+  m_Name: Handle Slide Area
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2414034270371963219
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2414034270371963220}
+  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: 2414034268628162293}
+  m_Father: {fileID: 2414034268525707326}
+  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: -20, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}

+ 7 - 0
Assets/SmartBow/Resources/SmartBow/Prefabs/ZIM/SliderSetting.prefab.meta

@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b9f12e22b4f19a24ab8ad4a1cf90cbc0
+PrefabImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно