diff --git a/Assets/Res/language/language.json b/Assets/Res/language/language.json
index d9c367e..2720df4 100644
--- a/Assets/Res/language/language.json
+++ b/Assets/Res/language/language.json
@@ -1433,6 +1433,16 @@
"key": "100287",
"zh": "该设备已绑定",
"en": "This device is already linked"
+ },
+ {
+ "key": "100288",
+ "zh": "指纹已开启",
+ "en": "Fingerprint is enabled"
+ },
+ {
+ "key": "100289",
+ "zh": "如需新增或修改指纹,可按设备端屏幕提示,录入指纹",
+ "en": "If you have any new or modified fingerprint requirements, please follow the instructions on the device screen to enter the fingerprint."
}
diff --git a/Assets/Res/ui/common/单按钮提示.prefab b/Assets/Res/ui/common/单按钮提示.prefab
new file mode 100644
index 0000000..bcdd293
--- /dev/null
+++ b/Assets/Res/ui/common/单按钮提示.prefab
@@ -0,0 +1,625 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &1628669527465019229
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7071856029691567709}
+ - component: {fileID: 9202845661971650394}
+ - component: {fileID: 3190920873548207298}
+ - component: {fileID: 1248201578676027279}
+ m_Layer: 5
+ m_Name: Text (Legacy)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7071856029691567709
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1628669527465019229}
+ 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: 269136806169290716}
+ 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 &9202845661971650394
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1628669527465019229}
+ m_CullTransparentMesh: 1
+--- !u!114 &3190920873548207298
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1628669527465019229}
+ 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.20392157, g: 0.56078434, b: 0.98039216, 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: 30
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Confirm
+--- !u!114 &1248201578676027279
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1628669527465019229}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ textKey: 100106
+--- !u!1 &1792236051090932880
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6715770809397732722}
+ - component: {fileID: 5567174151178045016}
+ - component: {fileID: 4029649795924197337}
+ - component: {fileID: 4810305385758750724}
+ - component: {fileID: 8836701026981932298}
+ m_Layer: 5
+ m_Name: "\u6846"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6715770809397732722
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1792236051090932880}
+ 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: 8191280304241920082}
+ - {fileID: 381961421419391428}
+ - {fileID: 269136806169290716}
+ m_Father: {fileID: 696055543828060918}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 1}
+ m_AnchorMax: {x: 0.5, y: 1}
+ m_AnchoredPosition: {x: 0, y: -524}
+ m_SizeDelta: {x: 590, y: 0}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!222 &5567174151178045016
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1792236051090932880}
+ m_CullTransparentMesh: 1
+--- !u!114 &4029649795924197337
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1792236051090932880}
+ 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: 21300000, guid: 842300c204002d94e9ae203dcf1f8d9c, 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!114 &4810305385758750724
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1792236051090932880}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 30
+ m_Right: 30
+ m_Top: 55
+ m_Bottom: 30
+ m_ChildAlignment: 1
+ m_Spacing: 50
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 0
+ m_ChildControlWidth: 1
+ m_ChildControlHeight: 1
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
+--- !u!114 &8836701026981932298
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1792236051090932880}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_HorizontalFit: 0
+ m_VerticalFit: 2
+--- !u!1 &4130916194918958444
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 696055543828060918}
+ - component: {fileID: 8040655407952689925}
+ - component: {fileID: 5055016361213408001}
+ - component: {fileID: 5839719937898351776}
+ m_Layer: 5
+ m_Name: "\u5355\u6309\u94AE\u63D0\u793A"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &696055543828060918
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4130916194918958444}
+ 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: 6715770809397732722}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8040655407952689925
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4130916194918958444}
+ m_CullTransparentMesh: 1
+--- !u!114 &5055016361213408001
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4130916194918958444}
+ 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, g: 0, b: 0, a: 0.6}
+ 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: 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!114 &5839719937898351776
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4130916194918958444}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ce7f9a66c3b832343bd86c4b491d90c8, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ confirmButton: {fileID: 2090749183783791373}
+ cancelButton: {fileID: 0}
+--- !u!1 &8351434878804813786
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 269136806169290716}
+ - component: {fileID: 1053182184697387171}
+ - component: {fileID: 1199500508654548052}
+ - component: {fileID: 2090749183783791373}
+ m_Layer: 5
+ m_Name: "\u786E\u8BA4"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &269136806169290716
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8351434878804813786}
+ 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: 7071856029691567709}
+ m_Father: {fileID: 6715770809397732722}
+ 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: 0, y: 0}
+ m_Pivot: {x: 1, y: 0}
+--- !u!222 &1053182184697387171
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8351434878804813786}
+ m_CullTransparentMesh: 1
+--- !u!114 &1199500508654548052
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8351434878804813786}
+ 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: 21300000, guid: 9ba8285e32466b442b315221e67f1b27, 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!114 &2090749183783791373
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8351434878804813786}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1199500508654548052}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls:
+ - m_Target: {fileID: 0}
+ m_TargetAssemblyTypeName:
+ m_MethodName:
+ m_Mode: 1
+ m_Arguments:
+ m_ObjectArgument: {fileID: 0}
+ m_ObjectArgumentAssemblyTypeName:
+ m_IntArgument: 0
+ m_FloatArgument: 0
+ m_StringArgument:
+ m_BoolArgument: 0
+ m_CallState: 2
+--- !u!1 &8472836610491391961
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 381961421419391428}
+ - component: {fileID: 4672404822650930682}
+ - component: {fileID: 2791978210847019385}
+ - component: {fileID: 1962274305946165533}
+ m_Layer: 5
+ m_Name: "\u63D0\u793A"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &381961421419391428
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8472836610491391961}
+ 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: 6715770809397732722}
+ 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: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!222 &4672404822650930682
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8472836610491391961}
+ m_CullTransparentMesh: 1
+--- !u!114 &2791978210847019385
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8472836610491391961}
+ 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.6156863, g: 0.6117647, b: 0.61960787, 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: 30
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 40
+ m_Alignment: 1
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1.5
+ m_Text: "\u5982\u9700\u65B0\u589E\u6216\u4FEE\u6539\u6307\u7EB9\uFF0C\u53EF\u6309\u8BBE\u5907\u7AEF\u5C4F\u5E55\u63D0\u793A\uFF0C\u5F55\u5165\u6307\u7EB9"
+--- !u!114 &1962274305946165533
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8472836610491391961}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ textKey: 100289
+--- !u!1 &8523344762577489648
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 8191280304241920082}
+ - component: {fileID: 3138494585675734589}
+ - component: {fileID: 7437345878654692032}
+ - component: {fileID: 6546256193871353219}
+ m_Layer: 5
+ m_Name: "\u6807\u9898"
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &8191280304241920082
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8523344762577489648}
+ 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: 6715770809397732722}
+ 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: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 1}
+--- !u!222 &3138494585675734589
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8523344762577489648}
+ m_CullTransparentMesh: 1
+--- !u!114 &7437345878654692032
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8523344762577489648}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 32
+ m_FontStyle: 1
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Fingerprint is enabled
+--- !u!114 &6546256193871353219
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8523344762577489648}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ textKey: 100288
diff --git a/Assets/Res/ui/common/单按钮提示.prefab.meta b/Assets/Res/ui/common/单按钮提示.prefab.meta
new file mode 100644
index 0000000..1658802
--- /dev/null
+++ b/Assets/Res/ui/common/单按钮提示.prefab.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 5889751526db1f74a9543acbf94fd9ad
+PrefabImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Res/ui/common/删除提示.prefab b/Assets/Res/ui/common/双按钮提示.prefab
similarity index 99%
rename from Assets/Res/ui/common/删除提示.prefab
rename to Assets/Res/ui/common/双按钮提示.prefab
index 7194171..425b519 100644
--- a/Assets/Res/ui/common/删除提示.prefab
+++ b/Assets/Res/ui/common/双按钮提示.prefab
@@ -399,7 +399,7 @@ GameObject:
- component: {fileID: 6479957488366169775}
- component: {fileID: 104968393464765146}
m_Layer: 5
- m_Name: "\u5220\u9664\u63D0\u793A"
+ m_Name: "\u53CC\u6309\u94AE\u63D0\u793A"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
diff --git a/Assets/Res/ui/common/删除提示.prefab.meta b/Assets/Res/ui/common/双按钮提示.prefab.meta
similarity index 100%
rename from Assets/Res/ui/common/删除提示.prefab.meta
rename to Assets/Res/ui/common/双按钮提示.prefab.meta
diff --git a/Assets/Res/ui/deviceinfopage/deviceInfoPage.prefab b/Assets/Res/ui/deviceinfopage/deviceInfoPage.prefab
index 8a5d17d..a66999e 100644
--- a/Assets/Res/ui/deviceinfopage/deviceInfoPage.prefab
+++ b/Assets/Res/ui/deviceinfopage/deviceInfoPage.prefab
@@ -6139,6 +6139,7 @@ RectTransform:
- {fileID: 4490097547122601957}
- {fileID: 2859089164995719961}
- {fileID: 537902066735883185}
+ - {fileID: 1020774894406731393}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -6218,6 +6219,7 @@ MonoBehaviour:
type: 3}
aboutDevicePage: {fileID: 5262132869297104299, guid: 670a441669367ce488c5e5669588bd7b,
type: 3}
+ fingerTip: {fileID: 4526559540901943579}
renamePage: {fileID: 5645959591324032198, guid: be26d26f3871cd74a9948cdacf02e1be,
type: 3}
videoAndSoundSetting: {fileID: 2229569971690620424, guid: f9b831fc6ebe43947b737bcd71c8839f,
@@ -7328,6 +7330,261 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
textKey: 100156
+--- !u!1001 &541108773294447735
+PrefabInstance:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ serializedVersion: 3
+ m_TransformParent: {fileID: 1237914662051168101}
+ m_Modifications:
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 530
+ objectReference: {fileID: 0}
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 90
+ objectReference: {fileID: 0}
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 560
+ objectReference: {fileID: 0}
+ - target: {fileID: 269136806169290716, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -365
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 530
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 84
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 295
+ objectReference: {fileID: 0}
+ - target: {fileID: 381961421419391428, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -141
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_Pivot.x
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_Pivot.y
+ value: 0.5
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMax.x
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMin.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalRotation.w
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalRotation.x
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalRotation.y
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalRotation.z
+ value: -0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalEulerAnglesHint.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalEulerAnglesHint.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_LocalEulerAnglesHint.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 2090749183783791373, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
+ value: 6
+ objectReference: {fileID: 0}
+ - target: {fileID: 2090749183783791373, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
+ value:
+ objectReference: {fileID: 4526559540901943579}
+ - target: {fileID: 2090749183783791373, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
+ value: SetActive
+ objectReference: {fileID: 0}
+ - target: {fileID: 2090749183783791373, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
+ value: UnityEngine.GameObject, UnityEngine
+ objectReference: {fileID: 0}
+ - target: {fileID: 2090749183783791373, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
+ value: UnityEngine.Object, UnityEngine
+ objectReference: {fileID: 0}
+ - target: {fileID: 4130916194918958444, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_Name
+ value: "\u6307\u7EB9\u63D0\u793A"
+ objectReference: {fileID: 0}
+ - target: {fileID: 4130916194918958444, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_IsActive
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 6715770809397732722, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 395
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.x
+ value: 530
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_SizeDelta.y
+ value: 36
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 295
+ objectReference: {fileID: 0}
+ - target: {fileID: 8191280304241920082, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: -55
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_RemovedGameObjects: []
+ m_AddedGameObjects: []
+ m_AddedComponents: []
+ m_SourcePrefab: {fileID: 100100000, guid: 5889751526db1f74a9543acbf94fd9ad, type: 3}
+--- !u!224 &1020774894406731393 stripped
+RectTransform:
+ m_CorrespondingSourceObject: {fileID: 696055543828060918, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ m_PrefabInstance: {fileID: 541108773294447735}
+ m_PrefabAsset: {fileID: 0}
+--- !u!1 &4526559540901943579 stripped
+GameObject:
+ m_CorrespondingSourceObject: {fileID: 4130916194918958444, guid: 5889751526db1f74a9543acbf94fd9ad,
+ type: 3}
+ m_PrefabInstance: {fileID: 541108773294447735}
+ m_PrefabAsset: {fileID: 0}
--- !u!1001 &5824630111754697378
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/Res/ui/homepage/homePage.prefab b/Assets/Res/ui/homepage/homePage.prefab
index b0cac95..e501d59 100644
--- a/Assets/Res/ui/homepage/homePage.prefab
+++ b/Assets/Res/ui/homepage/homePage.prefab
@@ -1639,8 +1639,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
- m_AnchoredPosition: {x: 0, y: -370}
- m_SizeDelta: {x: 327, y: 269}
+ m_AnchoredPosition: {x: 0, y: -390}
+ m_SizeDelta: {x: 246, y: 202}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &8844074217959470940
CanvasRenderer:
@@ -12494,7 +12494,7 @@ RectTransform:
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: -53.5, y: -40}
+ m_AnchoredPosition: {x: -40, y: -40}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8379037123785794455
diff --git a/Assets/Res/ui/homepage/产品图.png b/Assets/Res/ui/homepage/产品图.png
index 2337970..67da998 100644
Binary files a/Assets/Res/ui/homepage/产品图.png and b/Assets/Res/ui/homepage/产品图.png differ
diff --git a/Assets/Scripts/Bluetooth/BLECommunicationManager.cs b/Assets/Scripts/Bluetooth/BLECommunicationManager.cs
index 463ed68..8350c6c 100644
--- a/Assets/Scripts/Bluetooth/BLECommunicationManager.cs
+++ b/Assets/Scripts/Bluetooth/BLECommunicationManager.cs
@@ -2272,8 +2272,6 @@ namespace Kill.Bluetooth
if (frame.Command == BLEConstants.CMD_SCHEDULE_TASK)
{
Debug.Log($"[SendFrame] 完整帧数据: {BitConverter.ToString(frameBytes)}");
- Debug.Log($"[SendFrame] 帧解析: Header={frameBytes[0]:X2}-{frameBytes[1]:X2}, Cmd={frameBytes[2]:X2}, RW={frameBytes[3]:X2}, Len={frameBytes[4]:X2}");
- Debug.Log($"[SendFrame] 数据字段: {BitConverter.ToString(frameBytes, 5, frameBytes[4])}");
}
IsWaitingResponse = true;
@@ -2665,6 +2663,77 @@ namespace Kill.Bluetooth
}
}
+ #region WiFi指令获取接口
+
+ ///
+ /// 获取完整蓝牙指令字节数组(用于WiFi发送)
+ /// 将BLE协议帧转换为字节数组,可直接通过TCP发送给服务器
+ ///
+ /// 命令码
+ /// 读写标识 0x00=读, 0x01=写, 0x02=通知
+ /// 数据字段(可为null)
+ /// 完整的协议帧字节数组(包含帧头、命令、数据、CRC)
+ public byte[] GetCommandBytes(byte command, byte readWrite, byte[] data)
+ {
+ var frame = new BLEFrame
+ {
+ Header1 = BLEConstants.FRAME_HEADER_1,
+ Header2 = BLEConstants.FRAME_HEADER_2,
+ Command = command,
+ ReadWrite = readWrite,
+ Length = (byte)(data?.Length ?? 0),
+ Data = data
+ };
+
+ return frame.ToBytes();
+ }
+
+ ///
+ /// 获取完整蓝牙指令字节数组(简化版,默认写操作)
+ ///
+ /// 命令码
+ /// 数据字段(可为null)
+ /// 完整的协议帧字节数组
+ public byte[] GetCommandBytes(byte command, byte[] data)
+ {
+ return GetCommandBytes(command, BLEConstants.RW_WRITE, data);
+ }
+
+ ///
+ /// 获取读取指令字节数组(简化版,读操作无数据)
+ ///
+ /// 命令码
+ /// 完整的协议帧字节数组
+ public byte[] GetReadCommandBytes(byte command)
+ {
+ return GetCommandBytes(command, BLEConstants.RW_READ, null);
+ }
+
+ ///
+ /// 获取指令的十六进制字符串表示(用于调试)
+ ///
+ /// 命令码
+ /// 读写标识
+ /// 数据字段
+ /// 十六进制字符串,如 "AA-55-23-01-04-..."
+ public string GetCommandHexString(byte command, byte readWrite, byte[] data)
+ {
+ byte[] bytes = GetCommandBytes(command, readWrite, data);
+ return BitConverter.ToString(bytes);
+ }
+
+ ///
+ /// 从BLEFrame获取完整指令字节数组
+ ///
+ /// 协议帧结构
+ /// 完整的协议帧字节数组
+ public byte[] GetFrameBytes(BLEFrame frame)
+ {
+ return frame.ToBytes();
+ }
+
+ #endregion
+
private void Log(string message)
{
Debug.Log($"[BLECommunication] {message}");
diff --git a/Assets/Scripts/Network/NetworkCtrl.cs b/Assets/Scripts/Network/NetworkCtrl.cs
index 7e06bea..508c15a 100644
--- a/Assets/Scripts/Network/NetworkCtrl.cs
+++ b/Assets/Scripts/Network/NetworkCtrl.cs
@@ -1058,5 +1058,33 @@ namespace Kill.Network
}
#endregion
+
+ #region 设备控制指令接口
+
+ #endregion
}
+
+ #region 设备控制接口数据模型
+
+ ///
+ /// 设备控制指令请求
+ ///
+ [System.Serializable]
+ public class DeviceControlRequest
+ {
+ public string device_sn;
+ public string command;
+ }
+
+ ///
+ /// 设备控制指令响应
+ ///
+ [System.Serializable]
+ public class DeviceControlResponse
+ {
+ public string code;
+ public string message;
+ }
+
+ #endregion
}
diff --git a/Assets/Scripts/UI/Pages/DeviceInfoPage/DeviceInfoPage.cs b/Assets/Scripts/UI/Pages/DeviceInfoPage/DeviceInfoPage.cs
index 7edfc5d..45ed927 100644
--- a/Assets/Scripts/UI/Pages/DeviceInfoPage/DeviceInfoPage.cs
+++ b/Assets/Scripts/UI/Pages/DeviceInfoPage/DeviceInfoPage.cs
@@ -127,6 +127,7 @@ namespace Kill.UI.Pages
});
});
}
+ public GameObject fingerTip;
public void SetFingerprint()
{
BLECommunicationManager.Instance.StartFingerprintRecord(nowUserid, (response) =>
@@ -135,6 +136,7 @@ namespace Kill.UI.Pages
{
if (response.IsSuccess)
{
+ fingerTip.SetActive(true);
LoadingUI.Hide();
}
else
diff --git a/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs b/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs
index 816eade..a506ba9 100644
--- a/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs
+++ b/Assets/Scripts/UI/Pages/HomePage/HomePageCtrl.cs
@@ -492,9 +492,6 @@ namespace Kill.UI.Pages
{
deviceCtrl?.InitWrokMode(mode);
});
-
- // 等待响应处理完成后再查询工作模式确认
- StartCoroutine(QueryWorkModeAfterSet());
}
else
{
@@ -506,52 +503,34 @@ namespace Kill.UI.Pages
}
-
-
-
- ///
- /// 设置工作模式后查询确认(等待响应处理完成)
- ///
- private IEnumerator QueryWorkModeAfterSet()
+ public void SetWorkModeByWifi(int mode)
{
- // 等待一帧确保响应处理完成
- yield return null;
-
- // 再等待 300ms 确保设备处理完成
- yield return new WaitForSeconds(0.3f);
-
- Debug.Log("[HomePageCtrl] 重新查询工作模式确认...");
- BLECommunicationManager.Instance?.ReadWorkMode();
-
- // 等待查询响应完成后再隐藏 Loading
- StartCoroutine(HideLoadingAfterQueryWorkMode());
+ SetWorkModeByWifiAsync(mode);
}
-
- ///
- /// 查询工作模式响应后隐藏 Loading
- ///
- private IEnumerator HideLoadingAfterQueryWorkMode()
+ public async Task SetWorkModeByWifiAsync(int mode)
{
- isWaitingForWorkModeQuery = true;
-
- // 等待最多 2 秒接收工作模式响应
- float timeout = 2f;
- float elapsed = 0f;
-
- while (elapsed < timeout)
+ // 发送设置工作模式为消杀的指令
+ var setting = new WorkModeSetting { Mode = (WorkMode)mode };
+ byte[] commandBytes = BLECommunicationManager.Instance.GetCommandBytes(
+ BLEConstants.CMD_WORK_MODE_SETTING,
+ BLEConstants.RW_WRITE,
+ setting.ToBytes()
+ );
+ string commandHex = BitConverter.ToString(commandBytes).Replace("-", "");
+ Debug.Log(commandHex);
+ var requestData = new DeviceControlRequest
{
- // 如果标志被重置,说明收到了响应
- if (!isWaitingForWorkModeQuery)
- {
- Debug.Log("[HomePageCtrl] 收到工作模式查询响应,隐藏 Loading");
- break;
- }
- yield return new WaitForSeconds(0.05f);
- elapsed += 0.05f;
- }
+ device_sn =selectedDevice.ble_mac,
+ command = commandHex
+ };
- isWaitingForWorkModeQuery = false;
- LoadingUI.Hide();
+ var response = await NetworkCtrl.Instance.Post("/api/v1/device/command",requestData);
+
+ // 处理结果
+ if (response.IsSuccess)
+ {
+ ToastUI.Show(response.Data.message);
+ }
}