设备绑定

This commit is contained in:
“虞渠成” 2026-04-28 16:35:51 +08:00
parent a06bf877a4
commit a30c334bb5
106 changed files with 17523 additions and 1457 deletions

Binary file not shown.

View File

@ -0,0 +1,31 @@
ManifestFileVersion: 0
CRC: 256577813
AssetBundleManifest:
AssetBundleInfos:
Info_0:
Name: ui_homepage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_1:
Name: common.ab
Dependencies: {}
Info_2:
Name: language.ab
Dependencies: {}
Info_3:
Name: ui_common.ab
Dependencies:
Dependency_0: ui_loginpage.ab
Info_4:
Name: ui_loginpage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_5:
Name: ui_safetylearningpage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_6:
Name: ui_connectdevicepage.ab
Dependencies:
Dependency_0: common.ab
Dependency_1: ui_common.ab

Binary file not shown.

View File

@ -1,66 +1,21 @@
ManifestFileVersion: 0
CRC: 233218370
CRC: 374579679
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c80e189aa6f9c8d7ee6bc50f7300305d
Hash: 23b30b8b7538d15e7e1f5c745bb57c50
TypeTreeHash:
serializedVersion: 2
Hash: be157f972cb3f854d77a3240d64a7387
Hash: 958b54fb77cc0a35b3bf79f07d0e96ea
IncrementalBuildHash:
serializedVersion: 2
Hash: c80e189aa6f9c8d7ee6bc50f7300305d
Hash: 23b30b8b7538d15e7e1f5c745bb57c50
HashAppended: 0
ClassTypes:
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 74
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FaceInfo_Legacy
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FontAssetCreationSettings
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.KerningTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_Character
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontFeatureTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontWeightPair
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphPairAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphValueRecord
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.FaceInfo
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.Glyph
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphMetrics
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphRect
SerializeReferenceClassIdentifiers: []
Assets:
- Assets/Res/common/LiberationSans SDF - Drop Shadow.mat
- Assets/Res/common/TMP_SDF-Mobile.shader
- Assets/Res/common/LiberationSans SDF - Fallback.asset
- Assets/Res/common/LiberationSans SDF - Outline.mat
- Assets/Res/common/loadingNew.anim
- Assets/Res/common/loading.anim
- Assets/Res/common/MiSans-Medium.ttf
- Assets/Res/common/MiSans-Medium SDF.asset
- Assets/Res/common/LiberationSans SDF.asset
- Assets/Res/common/LiberationSans.ttf
Dependencies: []

View File

@ -1,46 +0,0 @@
{
"project_info": {
"project_number": "785438724947",
"project_id": "photonmatrix-ac0b5",
"storage_bucket": "photonmatrix-ac0b5.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:785438724947:android:352ede76bb25311f51c7a6",
"android_client_info": {
"package_name": "com.photonmatrix.photonmatrix"
}
},
"oauth_client": [
{
"client_id": "785438724947-kpjbqi43hbj6eddianbjsgkgkkclkfmd.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAntcCsZGurbXg7TFbPMPx5aek6HDYYVxk"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "785438724947-kpjbqi43hbj6eddianbjsgkgkkclkfmd.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "785438724947-r578u4au09ebieu0pnahj8ef08s1uhqp.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.photonmatrix.photonmatrix"
}
}
]
}
}
}
],
"configuration_version": "1"
}

View File

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

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 749593259
CRC: 142284609
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 81a8de0bb4c5928c43220b249b335c6b
Hash: 98e62aa9d1a917725e16d689a36329b2
TypeTreeHash:
serializedVersion: 2
Hash: 5ad585dd02dfb5016c0dad519eab8f49
IncrementalBuildHash:
serializedVersion: 2
Hash: 81a8de0bb4c5928c43220b249b335c6b
Hash: 98e62aa9d1a917725e16d689a36329b2
HashAppended: 0
ClassTypes:
- Class: 49

View File

@ -1,55 +0,0 @@
{
"version": "1.0.1",
"assetbundles": [
{
"name": "common.ab",
"size": 12854223,
"md5": "c2fa51b131e3d8a65d4134c8670ee99b"
},
{
"name": "language.ab",
"size": 2226,
"md5": "6e10d9c8c23778a25684dd8d69350510"
},
{
"name": "ui_common.ab",
"size": 12606,
"md5": "1dfaf11957a90b775e0be5f6fe37452b"
},
{
"name": "ui_homepage.ab",
"size": 9787,
"md5": "4c4595943f5c31673338e2ca83147ee8"
},
{
"name": "ui_loginpage.ab",
"size": 241923,
"md5": "520989d12bfdae3368c3fd88f8381d3e"
},
{
"name": "common.ab.manifest",
"size": 2173,
"md5": "7f35fb8fc14986f31d17c6483a90b4f3"
},
{
"name": "language.ab.manifest",
"size": 473,
"md5": "335cc7d7481861141ee8e6fff52f3976"
},
{
"name": "ui_common.ab.manifest",
"size": 2905,
"md5": "a05683fbffe6068095d6b7ef877f0ef4"
},
{
"name": "ui_homepage.ab.manifest",
"size": 2419,
"md5": "c3971548d08125ef72bade017cebabdc"
},
{
"name": "ui_loginpage.ab.manifest",
"size": 4757,
"md5": "99941302876547c4759f674f80fee5db"
}
]
}

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 714414049
CRC: 2161279840
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 1153a9a71c2079962f868c3866d681ad
Hash: 4ea1223b61d0b2425614da34c0e9dd5c
TypeTreeHash:
serializedVersion: 2
Hash: 24e7573d98028b3cc7bcae0654eab5fa
Hash: 3d0aa9280e2017137102b2dcf180d097
IncrementalBuildHash:
serializedVersion: 2
Hash: 1153a9a71c2079962f868c3866d681ad
Hash: 4ea1223b61d0b2425614da34c0e9dd5c
HashAppended: 0
ClassTypes:
- Class: 1
@ -21,15 +21,15 @@ ClassTypes:
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
Script: {fileID: 11500000, guid: 767fbd85f067c1a4da213c13282cc05e, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 767fbd85f067c1a4da213c13282cc05e, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
@ -49,12 +49,38 @@ ClassTypes:
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FaceInfo_Legacy
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FontAssetCreationSettings
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.KerningTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_Character
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontFeatureTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontWeightPair
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphPairAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphValueRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.VertexGradient
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.FaceInfo
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.Glyph
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphMetrics
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphRect
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
@ -76,10 +102,24 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/common/\u9009\u53D6\u5934\u50CF.prefab"
- "Assets/Res/ui/common/\u8FD4\u56DE.png"
- "Assets/Res/ui/common/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/common/\u9A8C\u8BC1\u7801\u7EC4\u4EF6.prefab"
- Assets/Res/ui/common/Rectangle 132 (2).png
- "Assets/Res/ui/common/\u5C0F\u6309\u94AE.png"
- "Assets/Res/ui/common/Check-small (\u6821\u9A8C-\u5C0F).png"
- "Assets/Res/ui/common/\u9009\u53D6\u5934\u50CF.prefab"
- "Assets/Res/ui/common/\u6307\u7EB9.png"
- "Assets/Res/ui/common/\u8FD4\u56DE.png"
- "Assets/Res/ui/common/Right (\u53F3) (1).png"
- Assets/Res/ui/common/Loading.png
- "Assets/Res/ui/common/\u89C6\u9891.png"
- "Assets/Res/ui/common/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/common/\u58F0\u97F3.png"
- "Assets/Res/ui/common/\u8BBE\u5907\u540D\u6B21.png"
- Assets/Res/ui/common/Rectangle 148 (1).png
- "Assets/Res/ui/common/\u5BC6\u7801 - \u5C55\u793A.png"
- Assets/Res/ui/common/Rectangle 148.png
- "Assets/Res/ui/common/Close (\u5173\u95ED).png"
- Assets/Res/ui/common/Ellipse 32.png
- "Assets/Res/ui/common/\u5B9A\u65F6.png"
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_loginpage.ab

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 411ccbd3ce3893b4cb7c2f82531993fe
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 6692d8124d25ece40acb1da49bb1bf7e
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,106 @@
ManifestFileVersion: 0
CRC: 1954010819
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c0f0a227dcda8c2fa20631441d246eaa
TypeTreeHash:
serializedVersion: 2
Hash: f416264907a65aa92adeeb00bf60fec2
IncrementalBuildHash:
serializedVersion: 2
Hash: c0f0a227dcda8c2fa20631441d246eaa
HashAppended: 0
ClassTypes:
- Class: 1
Script: {instanceID: 0}
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 74
Script: {instanceID: 0}
- Class: 111
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 2f6d707cba0376a43bc6d9f0a27ea376, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: cc4db0165ab541a44978ccde28b3bc29, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
- Class: 213
Script: {instanceID: 0}
- Class: 222
Script: {instanceID: 0}
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Button/ButtonClickedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/EndEditEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/OnChangeEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/SubmitEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Navigation
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ScrollRect/ScrollRectEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- Assets/Res/ui/connectdevicepage/Frame 19.png
- Assets/Res/ui/connectdevicepage/icon.png
- Assets/Res/ui/connectdevicepage/Rectangle 132 (3).png
- Assets/Res/ui/connectdevicepage/Frame 20.png
- "Assets/Res/ui/connectdevicepage/\u786E\u8BA4.png"
- Assets/Res/ui/connectdevicepage/connectDevicePage.prefab
- Assets/Res/ui/connectdevicepage/Rectangle 136.png
- "Assets/Res/ui/connectdevicepage/\u626B\u63CF.png"
- Assets/Res/ui/connectdevicepage/Vector.png
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 3121207904
CRC: 2873620311
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c751eb049ed9e8f8eb1a7678ce2327e6
Hash: a5e8163239fbf5550ab3beedb10929b1
TypeTreeHash:
serializedVersion: 2
Hash: 2da964eb972714674342a2708c4b8066
Hash: 252cf1d368eeed7b0aa25c6e638ef9a7
IncrementalBuildHash:
serializedVersion: 2
Hash: c751eb049ed9e8f8eb1a7678ce2327e6
Hash: a5e8163239fbf5550ab3beedb10929b1
HashAppended: 0
ClassTypes:
- Class: 1
@ -24,14 +24,10 @@ ClassTypes:
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 7fdaf0aeaf14a6d4c9beb4770e903acf, type: 3}
- Class: 115
@ -45,10 +41,12 @@ ClassTypes:
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.VertexGradient
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
@ -57,12 +55,6 @@ SerializeReferenceClassIdentifiers:
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/EndEditEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/OnChangeEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/SubmitEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
@ -70,6 +62,9 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/homepage/\u65E0\u8BBE\u5907.png"
- Assets/Res/ui/homepage/homePage.prefab
- "Assets/Res/ui/homepage/\u4E2A\u4EBA\u4E2D\u5FC3.png"
- "Assets/Res/ui/homepage/\u6D88\u606F.png"
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 427bee84e8448674196ec081992050a0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 6012662144bcee14e9f85185bd36b2c1
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 4028950989
CRC: 1506138910
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 59dce4d2a0ce9e0ae41212946c77f075
Hash: 111b08c284632c8965632707d85adb47
TypeTreeHash:
serializedVersion: 2
Hash: 70589c2c13c216b3c5fa3022c1dc899e
Hash: 481727e0eda7646426efebfcf2086aca
IncrementalBuildHash:
serializedVersion: 2
Hash: 59dce4d2a0ce9e0ae41212946c77f075
Hash: 111b08c284632c8965632707d85adb47
HashAppended: 0
ClassTypes:
- Class: 1
@ -21,9 +21,13 @@ ClassTypes:
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
Script: {fileID: 11500000, guid: 1a5913bec98c8024087f4dbe7b40ab1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
@ -36,8 +40,6 @@ ClassTypes:
Script: {fileID: 11500000, guid: 271b50f7241504b49a6a7493d13721e7, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: f53257c6334f5224a8c3d192d5653d1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
@ -50,8 +52,6 @@ ClassTypes:
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1a5913bec98c8024087f4dbe7b40ab1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
@ -104,23 +104,17 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Toggle/ToggleEvent
Assets:
- "Assets/Res/ui/loginPage/\u5BC6\u7801 (1) 1.png"
- Assets/Res/ui/loginPage/Rectangle 135.png
- Assets/Res/ui/loginPage/Frame 2 (1).png
- Assets/Res/ui/loginPage/Rectangle 132 (1).png
- "Assets/Res/ui/loginPage/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/loginPage/Check-small (\u6821\u9A8C-\u5C0F).png"
- Assets/Res/ui/loginPage/Group 144.png
- "Assets/Res/ui/loginPage/\u90AE\u7BB1-F 1.png"
- Assets/Res/ui/loginPage/Group 143.png
- "Assets/Res/ui/loginPage/\u9690\u79C1\u534F\u8BAE\u6846.png"
- Assets/Res/ui/loginPage/Rectangle 148 (1).png
- Assets/Res/ui/loginPage/Rectangle 132.png
- Assets/Res/ui/loginPage/Rectangle 148.png
- Assets/Res/ui/loginPage/loginPage.prefab
- "Assets/Res/ui/loginPage/Close (\u5173\u95ED).png"
- Assets/Res/ui/loginPage/bg.png
- Assets/Res/ui/loginPage/Ellipse 32.png
- Assets/Res/ui/loginPage/Rectangle 67.png
- "Assets/Res/ui/loginpage/\u5BC6\u7801 (1) 1.png"
- Assets/Res/ui/loginpage/Rectangle 135.png
- Assets/Res/ui/loginpage/Frame 2 (1).png
- Assets/Res/ui/loginpage/Rectangle 132 (1).png
- Assets/Res/ui/loginpage/Group 144.png
- "Assets/Res/ui/loginpage/\u90AE\u7BB1-F 1.png"
- Assets/Res/ui/loginpage/Group 143.png
- "Assets/Res/ui/loginpage/\u9690\u79C1\u534F\u8BAE\u6846.png"
- Assets/Res/ui/loginpage/Rectangle 132.png
- Assets/Res/ui/loginpage/loginPage.prefab
- Assets/Res/ui/loginpage/bg.png
- Assets/Res/ui/loginpage/Rectangle 67.png
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 8d67207d165a11a41abac6e85483b748
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 65d66671e6ec89c46a4bd059254702a0
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@ -0,0 +1,131 @@
ManifestFileVersion: 0
CRC: 3023159928
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: e7d4b9173c45ea64a3cc42487ba61dea
TypeTreeHash:
serializedVersion: 2
Hash: b6d37feeab1eec1182d85292d55ae196
IncrementalBuildHash:
serializedVersion: 2
Hash: e7d4b9173c45ea64a3cc42487ba61dea
HashAppended: 0
ClassTypes:
- Class: 1
Script: {instanceID: 0}
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: e982ad7d1eca06640864d29509a997f8, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 15f5bd88ea349c4488f6e34e51cecd59, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 271b50f7241504b49a6a7493d13721e7, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 6153f65e187d768439e5be590953dfb1, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 7b6c36ccd2295994fa13a1cc24de7db4, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89cec4ea05849a04981cec13b33447ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fa3a4570827eff04fb79b0bdd622e953, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 50d2a45eec2b4a34e9aa449adf569f10, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
- Class: 213
Script: {instanceID: 0}
- Class: 222
Script: {instanceID: 0}
- Class: 224
Script: {instanceID: 0}
- Class: 328
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.EventSystems.EventTrigger/Entry
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.EventSystems.EventTrigger/TriggerEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Button/ButtonClickedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Navigation
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ScrollRect/ScrollRectEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Scrollbar/ScrollEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Slider/SliderEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/safetylearningpage/\u666E\u901A\u80CC\u666F.png"
- Assets/Res/ui/safetylearningpage/Group 152.png
- "Assets/Res/ui/safetylearningpage/\u9519\u8BEFicon.png"
- "Assets/Res/ui/safetylearningpage/\u5168\u5C4F\u6846.png"
- "Assets/Res/ui/safetylearningpage/\u64AD\u653E.png"
- "Assets/Res/ui/safetylearningpage/\u9009\u4E2D.png"
- Assets/Res/ui/safetylearningpage/Ellipse 29.png
- "Assets/Res/ui/safetylearningpage/\u6B63\u786E\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u89E3\u6790.prefab"
- Assets/Res/ui/safetylearningpage/Rectangle 165.png
- "Assets/Res/ui/safetylearningpage/\u95EE\u9898.prefab"
- "Assets/Res/ui/safetylearningpage/\u5168\u5C4F\u56FE\u6807.png"
- Assets/Res/ui/safetylearningpage/Group 146.png
- "Assets/Res/ui/safetylearningpage/\u64AD\u653E\u5668\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u9898\u76EE.prefab"
- "Assets/Res/ui/safetylearningpage/\u9519\u8BEF\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u6B63\u786Eicon.png"
- Assets/Res/ui/safetylearningpage/Rectangle 119.png
- Assets/Res/ui/safetylearningpage/safetylearningPage.prefab
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

@ -0,0 +1,26 @@
#if UNITY_IOS
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
public class iOSPermissionPostProcessor
{
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
{
if (target != BuildTarget.iOS) return;
string plistPath = Path.Combine(pathToBuiltProject, "Info.plist");
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
PlistElementDict rootDict = plist.root;
// 添加摄像头权限描述
rootDict.SetString("NSCameraUsageDescription", "需要摄像头权限来扫描二维码连接设备");
File.WriteAllText(plistPath, plist.WriteToString());
}
}
#endif

View File

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

View File

@ -0,0 +1,45 @@
#if UNITY_IOS
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using System.IO;
public class iOSWiFiBuildPostProcessor
{
[PostProcessBuild]
public static void OnPostProcessBuild(BuildTarget target, string pathToBuiltProject)
{
if (target != BuildTarget.iOS) return;
string plistPath = Path.Combine(pathToBuiltProject, "Info.plist");
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
PlistElementDict rootDict = plist.root;
// 添加位置权限描述iOS 获取 WiFi 需要)
rootDict.SetString("NSLocationWhenInUseUsageDescription", "需要位置权限来获取当前 WiFi 信息");
// 添加蓝牙权限描述
rootDict.SetString("NSBluetoothAlwaysUsageDescription", "需要蓝牙权限来连接设备");
rootDict.SetString("NSBluetoothPeripheralUsageDescription", "需要蓝牙权限来连接设备");
// 添加后台模式
PlistElementArray bgModes = rootDict.CreateArray("UIBackgroundModes");
bgModes.AddString("fetch");
bgModes.AddString("bluetooth-central");
File.WriteAllText(plistPath, plist.WriteToString());
// 添加 CoreBluetooth.framework
string projPath = PBXProject.GetPBXProjectPath(pathToBuiltProject);
PBXProject proj = new PBXProject();
proj.ReadFromString(File.ReadAllText(projPath));
string targetGuid = proj.GetUnityMainTargetGuid();
proj.AddFrameworkToProject(targetGuid, "CoreBluetooth.framework", false);
File.WriteAllText(projPath, proj.WriteToString());
}
}
#endif

View File

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

View File

@ -2,7 +2,23 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.photonmatrix.photonmatrix">
<!-- 网络权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<!-- 相机权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<!-- Android 12+ 蓝牙权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 声明需要 BLE 功能 -->
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<application android:label="@string/app_name" android:icon="@mipmap/app_icon" android:theme="@style/UnityThemeSelector">
<!-- Unity 主 Activity -->
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboardHidden|keyboard">

View File

@ -316,7 +316,7 @@ public class BluetoothLEHardwareInterface
if (!locationAsked)
{
Permission.RequestUserPermission("android.permission.ACCESS_FINE_LOCATION");
locationAsked = false;
locationAsked = true;
timerValue = 2;
}
}
@ -327,7 +327,7 @@ public class BluetoothLEHardwareInterface
if (!connectAsked)
{
Permission.RequestUserPermission("android.permission.BLUETOOTH_CONNECT");
connectAsked = false;
connectAsked = true;
timerValue = 2;
}
}

View File

@ -0,0 +1,41 @@
#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
// 全局 CBCentralManager 用于检查蓝牙状态
static CBCentralManager *centralManager = nil;
extern "C" {
// 获取蓝牙状态
// 0 = Unknown, 1 = Resetting, 2 = Unsupported, 3 = Unauthorized, 4 = PoweredOff, 5 = PoweredOn
int GetBluetoothStateIOS() {
if (centralManager == nil) {
centralManager = [[CBCentralManager alloc] initWithDelegate:nil queue:nil options:@{CBCentralManagerOptionShowPowerAlertKey: @NO}];
}
switch (centralManager.state) {
case CBManagerStateUnknown:
return 0;
case CBManagerStateResetting:
return 1;
case CBManagerStateUnsupported:
return 2;
case CBManagerStateUnauthorized:
return 3;
case CBManagerStatePoweredOff:
return 4;
case CBManagerStatePoweredOn:
return 5;
default:
return 0;
}
}
// 打开蓝牙设置页面
void OpenBluetoothSettingsIOS() {
// iOS 10+ 使用 UIApplicationOpenSettingsURLString
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:settingsURL]) {
[[UIApplication sharedApplication] openURL:settingsURL options:@{} completionHandler:nil];
}
}
}

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: b51f7ee4c32678a46a9b5a5441e0ab2f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,29 @@
#import <Foundation/Foundation.h>
#import <SystemConfiguration/CaptiveNetwork.h>
extern "C" {
const char* GetWiFiSSID() {
NSString *ssid = nil;
NSArray *interfaces = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
for (NSString *interfaceName in interfaces) {
NSDictionary *info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName);
if (info && info[@"SSID"]) {
ssid = info[@"SSID"];
break;
}
}
if (ssid == nil) {
return NULL;
}
const char *utf8String = [ssid UTF8String];
char *result = (char *)malloc(strlen(utf8String) + 1);
strcpy(result, utf8String);
return result;
}
}

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 68b45a04bd851304e81662754e08006f
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
userData:
assetBundleName:
assetBundleVariant:

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 683775f18ffad45489f18e47e92d3b3f
guid: 194b916ca7a1a744ea8a07bd61dcf461
TextScriptImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -0,0 +1,33 @@
fileFormatVersion: 2
guid: 663300484feb96d438e2f609415c49b9
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@ -398,6 +398,41 @@
"key": "100080",
"zh": "定时设置",
"en": "Timer Settings"
},
{
"key": "100081",
"zh": "蓝牙未连接",
"en": "Bluetooth not connected"
},
{
"key": "100082",
"zh": "请输入WiFi名称",
"en": "Please enter the WiFi name"
},
{
"key": "100083",
"zh": "WiFi配置失败",
"en": "WiFi configuration failed"
},
{
"key": "100084",
"zh": "不是可解析的二维码",
"en": "Not a valid QR code"
},
{
"key": "100085",
"zh": "需要相机权限",
"en": "Camera permission required"
},
{
"key": "100086",
"zh": "没有可用的相机",
"en": "No available camera found"
},
{
"key": "100087",
"zh": "绑定设备失败",
"en": "Bind device failed"
}
]

View File

@ -435,7 +435,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: 22.499966, y: 0}
m_AnchoredPosition: {x: 22.49997, y: 0}
m_SizeDelta: {x: -224.99992, y: -50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5023175048173340824
@ -643,7 +643,7 @@ GameObject:
- component: {fileID: 8699770605319373498}
- component: {fileID: 3146394913032290597}
m_Layer: 5
m_Name: "\u8FD4\u56DE"
m_Name: ok
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -750,7 +750,19 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 8699770605319373498}
m_OnClick:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: BackToHomePage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &988057154901937007
GameObject:
m_ObjectHideFlags: 0
@ -1251,10 +1263,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 5409940142953436106}
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_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 79, y: -24}
m_SizeDelta: {x: 48, y: 48}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3344092125837105518
CanvasRenderer:
@ -1428,7 +1440,19 @@ MonoBehaviour:
m_Calls: []
m_OnDidEndEdit:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: CheckWifiNameAndPassword
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
@ -1574,7 +1598,19 @@ MonoBehaviour:
m_Calls: []
m_OnDidEndEdit:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: CheckWifiNameAndPassword
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
@ -1619,10 +1655,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 5409940142953436106}
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_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 257.5, y: -24}
m_SizeDelta: {x: 253, y: 33}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4250911166335314589
CanvasRenderer:
@ -1792,8 +1828,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: 352.17856, y: -0.5}
m_SizeDelta: {x: 654.3571, y: 1}
m_AnchoredPosition: {x: 345, y: -0.5}
m_SizeDelta: {x: 640, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3091012864071486640
CanvasRenderer:
@ -1872,7 +1908,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 41}
m_SizeDelta: {x: 0, y: 181}
m_Pivot: {x: 0.5, y: 1}
--- !u!222 &3494079613403270933
CanvasRenderer:
@ -2147,7 +2183,19 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 6325069307507327003}
m_OnClick:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: ShowSuccessPage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &2513300336666857560
GameObject:
m_ObjectHideFlags: 0
@ -2401,7 +2449,8 @@ GameObject:
m_Component:
- component: {fileID: 7163027539311665957}
- component: {fileID: 3037912135858668214}
- component: {fileID: 6233728829341084841}
- component: {fileID: 7322899035469920849}
- component: {fileID: 595539671003003557}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
@ -2436,7 +2485,7 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2945323903071304015}
m_CullTransparentMesh: 1
--- !u!114 &6233728829341084841
--- !u!114 &7322899035469920849
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -2445,7 +2494,7 @@ MonoBehaviour:
m_GameObject: {fileID: 2945323903071304015}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@ -2456,16 +2505,27 @@ MonoBehaviour:
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
m_Texture: {fileID: 0}
m_UVRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
--- !u!114 &595539671003003557
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2945323903071304015}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2f6d707cba0376a43bc6d9f0a27ea376, type: 3}
m_Name:
m_EditorClassIdentifier:
cameraPreview: {fileID: 7322899035469920849}
scanInterval: 0.2
--- !u!1 &3002205030434408749
GameObject:
m_ObjectHideFlags: 0
@ -2587,9 +2647,9 @@ MonoBehaviour:
m_OnClick:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 0}
m_TargetAssemblyTypeName: Kill.UI.Pages.SafetylearningPageCtrl, Assembly-CSharp
m_MethodName: ShowTestPage
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: OnWifiConfirmClick
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
@ -2910,6 +2970,7 @@ GameObject:
- component: {fileID: 8470092863222596142}
- component: {fileID: 2618585265216864651}
- component: {fileID: 7563423994747515918}
- component: {fileID: 7594996219059569243}
m_Layer: 5
m_Name: connectDevicePage
m_TagString: Untagged
@ -2979,6 +3040,39 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &7594996219059569243
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3618082575114099407}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cc4db0165ab541a44978ccde28b3bc29, type: 3}
m_Name:
m_EditorClassIdentifier:
sonPages:
- {fileID: 8658000908082698746}
- {fileID: 1611181877072402757}
- {fileID: 3437907824073216706}
- {fileID: 6686558202161898212}
topBar: {fileID: 7798396753565683054}
blueToothNameKeyWord: Photon
backButton: {fileID: 1397406542994158436}
skipButton: {fileID: 3347539392583723740}
titleText: {fileID: 1585603659324209016}
scanningIcon: {fileID: 8864897383993974507}
qrCodePlane: {fileID: 2945323903071304015}
wifiNameInput: {fileID: 5119858561715144003}
wifiPasswordInput: {fileID: 2039610925894288914}
wifiConfirmButtons:
- {fileID: 5767282775733738409}
- {fileID: 3002205030434408749}
deviceObjects: []
deviceListParent: {fileID: 2145748678941116742}
devicePrefab: {fileID: 9109268087238204734}
deviceListUi: {fileID: 7833149656934373945}
--- !u!1 &3773169203690086790
GameObject:
m_ObjectHideFlags: 0
@ -3099,7 +3193,19 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 8153291896281977173}
m_OnClick:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: EnterConnectPage
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &3789234655480925417
GameObject:
m_ObjectHideFlags: 0
@ -3740,7 +3846,7 @@ GameObject:
- component: {fileID: 7745107914549048796}
- component: {fileID: 4608673497435011388}
m_Layer: 5
m_Name: icon
m_Name: "\u72B6\u6001"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -5876,7 +5982,19 @@ MonoBehaviour:
m_TargetGraphic: {fileID: 2130092054336787548}
m_OnClick:
m_PersistentCalls:
m_Calls: []
m_Calls:
- m_Target: {fileID: 7594996219059569243}
m_TargetAssemblyTypeName: ConnectDevicePageCtrl, Assembly-CSharp
m_MethodName: ScanQrCode
m_Mode: 1
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
--- !u!1 &7583618795190144410
GameObject:
m_ObjectHideFlags: 0
@ -6226,13 +6344,14 @@ GameObject:
- component: {fileID: 6427568242623183702}
- component: {fileID: 4926338476861759006}
- component: {fileID: 3397136473555053414}
- component: {fileID: 1099820396088858073}
m_Layer: 5
m_Name: "\u84DD\u7259\u626B\u63CF\u5217\u8868"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!224 &6427568242623183702
RectTransform:
m_ObjectHideFlags: 0
@ -6291,6 +6410,36 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!114 &1099820396088858073
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7833149656934373945}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Content: {fileID: 1027440964492730408}
m_Horizontal: 0
m_Vertical: 1
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
m_DecelerationRate: 0.135
m_ScrollSensitivity: 1
m_Viewport: {fileID: 6427568242623183702}
m_HorizontalScrollbar: {fileID: 0}
m_VerticalScrollbar: {fileID: 0}
m_HorizontalScrollbarVisibility: 0
m_VerticalScrollbarVisibility: 0
m_HorizontalScrollbarSpacing: 0
m_VerticalScrollbarSpacing: 0
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
--- !u!1 &7872054224272033343
GameObject:
m_ObjectHideFlags: 0
@ -6637,7 +6786,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
m_IsActive: 0
--- !u!224 &6952404845597796920
RectTransform:
m_ObjectHideFlags: 0
@ -6696,7 +6845,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: -48.999985, y: 0}
m_AnchoredPosition: {x: -49, y: 0}
m_SizeDelta: {x: 48, y: 48}
m_Pivot: {x: 1, y: 0.5}
--- !u!222 &3914966073945110401
@ -6971,7 +7120,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
m_IsActive: 1
--- !u!224 &626860580578846986
RectTransform:
m_ObjectHideFlags: 0
@ -6991,8 +7140,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: 352.17856, y: -91}
m_SizeDelta: {x: 654.3571, y: 100}
m_AnchoredPosition: {x: 345, y: -91}
m_SizeDelta: {x: 640, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &6890668240902078438
CanvasRenderer:

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

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

View File

@ -338,6 +338,8 @@ GameObject:
- component: {fileID: 609900190}
- component: {fileID: 609900193}
- component: {fileID: 609900192}
- component: {fileID: 609900195}
- component: {fileID: 609900194}
m_Layer: 0
m_Name: Manager
m_TagString: Untagged
@ -454,6 +456,37 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ab2938f4ffde3874dac6f3504af213b1, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &609900194
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 609900186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 91bf0ca06c32c924c82e026dbb6f2ad7, type: 3}
m_Name:
m_EditorClassIdentifier:
AutoConnect: 0
ConnectionTimeout: 5
--- !u!114 &609900195
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 609900186}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 988c4ecb3723c08459756ef8e35db200, type: 3}
m_Name:
m_EditorClassIdentifier:
ResponseTimeout: 5
ServiceUUID: 0000ffe0-0000-1000-8000-00805f9b34fb
WriteCharacteristicUUID: 0000ffe1-0000-1000-8000-00805f9b34fb
NotifyCharacteristicUUID: 0000ffe1-0000-1000-8000-00805f9b34fb
AutoInitialize: 1
--- !u!1 &769989590
GameObject:
m_ObjectHideFlags: 0
@ -1053,8 +1086,7 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 700841237938974310}
m_Children: []
m_Father: {fileID: 1547547273}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -1160,200 +1192,6 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1996378183}
m_CullTransparentMesh: 1
--- !u!1001 &700841237938974309
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1896827481}
m_Modifications:
- target: {fileID: 1397406542994158436, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
objectReference: {fileID: 0}
- target: {fileID: 3618082575114099407, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_Name
value: connectDevicePage
objectReference: {fileID: 0}
- target: {fileID: 3618082575114099407, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.x
value: 253
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.y
value: 33
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 257.5
objectReference: {fileID: 0}
- target: {fileID: 5022358398572850883, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -24
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMin.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.x
value: 48
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.y
value: 48
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 79
objectReference: {fileID: 0}
- target: {fileID: 8438725810015241756, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.y
value: -24
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_Pivot.x
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_Pivot.y
value: 0.5
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMax.x
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMax.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMin.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchorMin.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_SizeDelta.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_AnchoredPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 7bbd7ee77d6885a448f5da2020aad6d7, type: 3}
--- !u!224 &700841237938974310 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 8470092863222596142, guid: 7bbd7ee77d6885a448f5da2020aad6d7,
type: 3}
m_PrefabInstance: {fileID: 700841237938974309}
m_PrefabAsset: {fileID: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0

View File

@ -2,6 +2,7 @@ using UnityEngine;
using System;
using System.Collections.Generic;
using Kill.Bluetooth.Protocol;
using Kill.UI.Components;
namespace Kill.Bluetooth
{
@ -256,7 +257,7 @@ namespace Kill.Bluetooth
/// <summary>
/// 查询设备注册状态 (命令 0x01)
/// </summary>
public void QueryRegistrationStatus(Action<DeviceRegistrationStatus> callback = null)
public void QueryRegistrationStatus(Action<bool,DeviceRegistrationStatus> callback = null)
{
if (!CheckConnection()) return;
@ -276,13 +277,13 @@ namespace Kill.Bluetooth
if (response.IsSuccess && response.Data != null)
{
var status = DeviceRegistrationStatus.FromBytes(response.Data);
callback?.Invoke(status);
callback?.Invoke(true,status);
OnRegistrationStatusReceived?.Invoke(status);
}
else
{
LogError($"查询注册状态失败: 状态码={response.Status:X2}");
callback?.Invoke(new DeviceRegistrationStatus());
callback?.Invoke(false,new DeviceRegistrationStatus());
}
});
}
@ -2309,17 +2310,91 @@ namespace Kill.Bluetooth
#region
/// <summary>
/// 检查蓝牙连接状态
/// 检查蓝牙连接状态(带自动初始化)
/// </summary>
private bool CheckConnection()
{
if (BluetoothManager.Instance == null) return false;
if (!BluetoothManager.Instance.IsConnected) return false;
if (IsWaitingResponse) return false;
// 检查蓝牙管理器
if (BluetoothManager.Instance == null)
{
LogError("BluetoothManager.Instance 为 null");
return false;
}
// 如果蓝牙未初始化,尝试自动初始化
if (!BluetoothManager.Instance.IsInitialized)
{
Log("蓝牙未初始化,尝试自动初始化...");
BluetoothManager.Instance.Initialize();
return false;
}
// 如果蓝牙未连接
if (!BluetoothManager.Instance.IsConnected)
{
LogError("蓝牙未连接");
ToastUI.Show("100081"); // "请先连接蓝牙设备"
return false;
}
// 如果正在等待响应
if (IsWaitingResponse)
{
Log("正在等待上一个响应...");
return false;
}
return true;
}
/// <summary>
/// 确保蓝牙已初始化并连接(异步)
/// </summary>
public void EnsureBluetoothReady(System.Action onReady)
{
if (BluetoothManager.Instance == null)
{
LogError("BluetoothManager.Instance 为 null");
return;
}
// 如果已经连接,直接回调
if (BluetoothManager.Instance.IsConnected)
{
onReady?.Invoke();
return;
}
// 如果未初始化,先初始化
if (!BluetoothManager.Instance.IsInitialized)
{
Log("蓝牙未初始化,开始初始化...");
BluetoothManager.Instance.Initialize();
// 订阅初始化完成事件
System.Action<bool> onInitialized = null;
onInitialized = (success) =>
{
BluetoothManager.Instance.OnInitialized -= onInitialized;
if (success)
{
Log("蓝牙初始化成功,可以开始扫描设备");
onReady?.Invoke();
}
else
{
LogError("蓝牙初始化失败");
}
};
BluetoothManager.Instance.OnInitialized += onInitialized;
}
else
{
// 已初始化但未连接
onReady?.Invoke();
}
}
/// <summary>
/// 获取状态码描述
/// </summary>

View File

@ -45,14 +45,10 @@ namespace Kill.Bluetooth
public bool IsScanning { get; private set; }
public bool IsConnected { get; private set; }
public string ConnectedDeviceAddress { get; private set; }
private string aimMac = "";
// 扫描到的设备列表
public List<BluetoothDevice> DiscoveredDevices { get; private set; } = new List<BluetoothDevice>();
// 上一次连接的设备地址
private const string LAST_DEVICE_ADDRESS_KEY = "LastConnectedDeviceAddress";
private const string LAST_DEVICE_NAME_KEY = "LastConnectedDeviceName";
// 是否自动连接
public bool AutoConnect = true;
@ -82,7 +78,10 @@ namespace Kill.Bluetooth
Instance = null;
}
}
void Start()
{
Initialize();
}
private void Update()
{
// 检查连接超时
@ -102,7 +101,7 @@ namespace Kill.Bluetooth
}
/// <summary>
/// 初始化蓝牙
/// 初始化蓝牙(带自动启用)
/// </summary>
public void Initialize()
{
@ -115,20 +114,228 @@ namespace Kill.Bluetooth
Log("正在初始化蓝牙...");
// 先检查蓝牙是否开启,如果没有则尝试启用
CheckAndEnableBluetooth(() =>
{
// 蓝牙已启用,执行初始化
DoInitialize();
});
}
/// <summary>
/// 检查并启用蓝牙
/// </summary>
private void CheckAndEnableBluetooth(System.Action onBluetoothReady)
{
#if UNITY_ANDROID && !UNITY_EDITOR
using (AndroidJavaClass bluetoothAdapterClass = new AndroidJavaClass("android.bluetooth.BluetoothAdapter"))
{
AndroidJavaObject bluetoothAdapter = bluetoothAdapterClass.CallStatic<AndroidJavaObject>("getDefaultAdapter");
if (bluetoothAdapter == null)
{
OnError?.Invoke("设备不支持蓝牙");
OnInitialized?.Invoke(false);
return;
}
bool isEnabled = bluetoothAdapter.Call<bool>("isEnabled");
if (!isEnabled)
{
Log("蓝牙未开启,尝试启用...");
// 尝试静默启用蓝牙
bool enableSuccess = bluetoothAdapter.Call<bool>("enable");
if (enableSuccess)
{
Log("正在启用蓝牙,等待...");
// 等待蓝牙启用
StartCoroutine(WaitForBluetoothEnabled(onBluetoothReady));
}
else
{
// 静默启用失败,请求用户启用
RequestUserEnableBluetooth(onBluetoothReady);
}
}
else
{
Log("蓝牙已开启");
onBluetoothReady?.Invoke();
}
}
#elif UNITY_IOS && !UNITY_EDITOR
// iOS 检查蓝牙状态
CheckBluetoothStateIOS(onBluetoothReady);
#else
// 其他平台直接执行初始化
onBluetoothReady?.Invoke();
#endif
}
#if UNITY_IOS && !UNITY_EDITOR
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern int GetBluetoothStateIOS();
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern void OpenBluetoothSettingsIOS();
/// <summary>
/// iOS 检查蓝牙状态
/// 0 = Unknown, 1 = Resetting, 2 = Unsupported, 3 = Unauthorized, 4 = PoweredOff, 5 = PoweredOn
/// </summary>
private void CheckBluetoothStateIOS(System.Action onBluetoothReady)
{
int state = GetBluetoothStateIOS();
Log($"iOS 蓝牙状态: {state}");
// 5 = PoweredOn (蓝牙已开启)
if (state == 5)
{
Log("iOS 蓝牙已开启");
onBluetoothReady?.Invoke();
}
// 4 = PoweredOff (蓝牙关闭)
else if (state == 4)
{
Log("iOS 蓝牙未开启,提示用户");
// iOS 不能自动打开蓝牙,只能提示用户去设置中开启
ShowIOSTurnOnBluetoothPrompt();
OnError?.Invoke("请在系统设置中开启蓝牙");
OnInitialized?.Invoke(false);
}
// 3 = Unauthorized (未授权)
else if (state == 3)
{
LogError("iOS 蓝牙未授权");
OnError?.Invoke("请在设置中允许使用蓝牙");
OnInitialized?.Invoke(false);
}
// 2 = Unsupported (不支持蓝牙)
else if (state == 2)
{
LogError("设备不支持蓝牙");
OnError?.Invoke("设备不支持蓝牙");
OnInitialized?.Invoke(false);
}
// 其他状态
else
{
Log($"iOS 蓝牙状态未知: {state},尝试继续初始化");
onBluetoothReady?.Invoke();
}
}
/// <summary>
/// 显示 iOS 开启蓝牙提示
/// </summary>
private void ShowIOSTurnOnBluetoothPrompt()
{
// 可以在这里显示一个弹窗,引导用户去设置
// 或者使用原生插件跳转到设置页面
OpenBluetoothSettingsIOS();
}
#endif
#if UNITY_ANDROID && !UNITY_EDITOR
/// <summary>
/// 等待蓝牙启用
/// </summary>
private System.Collections.IEnumerator WaitForBluetoothEnabled(System.Action onBluetoothReady)
{
float timeout = 5f;
float timer = 0f;
while (timer < timeout)
{
using (AndroidJavaClass bluetoothAdapterClass = new AndroidJavaClass("android.bluetooth.BluetoothAdapter"))
{
AndroidJavaObject bluetoothAdapter = bluetoothAdapterClass.CallStatic<AndroidJavaObject>("getDefaultAdapter");
if (bluetoothAdapter != null && bluetoothAdapter.Call<bool>("isEnabled"))
{
Log("蓝牙已成功启用");
onBluetoothReady?.Invoke();
yield break;
}
}
yield return new WaitForSeconds(0.5f);
timer += 0.5f;
}
Log("等待蓝牙启用超时");
OnError?.Invoke("蓝牙启用超时");
OnInitialized?.Invoke(false);
}
/// <summary>
/// 请求用户启用蓝牙
/// </summary>
private void RequestUserEnableBluetooth(System.Action onBluetoothReady)
{
Log("请求用户启用蓝牙...");
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
{
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "android.bluetooth.adapter.action.REQUEST_ENABLE");
currentActivity.Call("startActivityForResult", intent, 1);
}
// 等待用户响应
StartCoroutine(WaitForUserEnableBluetooth(onBluetoothReady));
}
/// <summary>
/// 等待用户启用蓝牙
/// </summary>
private System.Collections.IEnumerator WaitForUserEnableBluetooth(System.Action onBluetoothReady)
{
float timeout = 30f;
float timer = 0f;
while (timer < timeout)
{
using (AndroidJavaClass bluetoothAdapterClass = new AndroidJavaClass("android.bluetooth.BluetoothAdapter"))
{
AndroidJavaObject bluetoothAdapter = bluetoothAdapterClass.CallStatic<AndroidJavaObject>("getDefaultAdapter");
if (bluetoothAdapter != null && bluetoothAdapter.Call<bool>("isEnabled"))
{
Log("用户已启用蓝牙");
onBluetoothReady?.Invoke();
yield break;
}
}
yield return new WaitForSeconds(0.5f);
timer += 0.5f;
}
Log("用户未启用蓝牙或超时");
OnError?.Invoke("请启用蓝牙后重试");
OnInitialized?.Invoke(false);
}
#endif
/// <summary>
/// 执行蓝牙初始化
/// </summary>
// 标记是否已完成初始化
private bool _isFullyInitialized = false;
private void DoInitialize()
{
_isFullyInitialized = false;
BluetoothLEHardwareInterface.Initialize(true, false,
() =>
{
IsInitialized = true;
_isFullyInitialized = true;
Log("蓝牙初始化成功");
OnInitialized?.Invoke(true);
// 初始化成功后,延迟尝试自动连接上一次设备
// 延迟是为了让用户有机会先进行手动扫描
if (AutoConnect)
{
Log("将在3秒后尝试自动连接上一次设备...");
Invoke(nameof(TryAutoConnectDelayed), 3f);
}
},
(error) =>
{
@ -138,14 +345,14 @@ namespace Kill.Bluetooth
Log($"蓝牙初始化警告: {error}");
Log("继续初始化...");
IsInitialized = true;
_isFullyInitialized = true;
OnInitialized?.Invoke(true);
// 初始化成功后,延迟尝试自动连接上一次设备
if (AutoConnect)
{
Log("将在3秒后尝试自动连接上一次设备...");
Invoke(nameof(TryAutoConnectDelayed), 3f);
}
}
// 如果已经初始化完成,这是运行时错误,不是初始化错误
else if (_isFullyInitialized)
{
Log($"蓝牙运行时错误: {error}");
OnError?.Invoke(error);
}
else
{
@ -153,44 +360,45 @@ namespace Kill.Bluetooth
OnError?.Invoke($"初始化失败: {error}");
OnInitialized?.Invoke(false);
}
}
},
needLocation: true
);
}
/// <summary>
/// 延迟尝试自动连接(用于初始化后)
/// </summary>
private void TryAutoConnectDelayed()
{
// 如果用户已经开始扫描或连接,跳过自动连接
if (IsScanning || IsConnected || _isConnecting)
{
Log("用户正在进行扫描或连接,跳过自动连接");
return;
}
// /// <summary>
// /// 延迟尝试自动连接(用于初始化后)
// /// </summary>
// private void TryAutoConnectDelayed()
// {
// // 如果用户已经开始扫描或连接,跳过自动连接
// if (IsScanning || IsConnected || _isConnecting)
// {
// Log("用户正在进行扫描或连接,跳过自动连接");
// return;
// }
TryAutoConnect();
}
// TryAutoConnect();
// }
/// <summary>
/// 尝试自动连接上一次连接的设备
/// </summary>
private void TryAutoConnect()
{
string lastAddress = PlayerPrefs.GetString(LAST_DEVICE_ADDRESS_KEY, "");
string lastName = PlayerPrefs.GetString(LAST_DEVICE_NAME_KEY, "");
// /// <summary>
// /// 尝试自动连接上一次连接的设备
// /// </summary>
// private void TryAutoConnect()
// {
// string lastAddress = PlayerPrefs.GetString(LAST_DEVICE_ADDRESS_KEY, "");
// string lastName = PlayerPrefs.GetString(LAST_DEVICE_NAME_KEY, "");
if (string.IsNullOrEmpty(lastAddress))
{
Log("没有上一次连接的设备记录");
return;
}
// if (string.IsNullOrEmpty(lastAddress))
// {
// Log("没有上一次连接的设备记录");
// return;
// }
Log($"尝试自动连接上一次设备: {lastName} [{lastAddress}]");
// Log($"尝试自动连接上一次设备: {lastName} [{lastAddress}]");
// 先扫描设备,找到后再连接
StartScanForAutoConnect(lastAddress);
}
// // 先扫描设备,找到后再连接
// StartScanForAutoConnect(lastAddress);
// }
/// <summary>
/// 为自动连接扫描设备
@ -263,29 +471,9 @@ namespace Kill.Bluetooth
}
}
/// <summary>
/// 保存连接的设备信息
/// </summary>
private void SaveLastConnectedDevice(string address, string name)
{
// 统一使用大写格式保存,确保地址格式一致
string normalizedAddress = address.ToUpper();
PlayerPrefs.SetString(LAST_DEVICE_ADDRESS_KEY, normalizedAddress);
PlayerPrefs.SetString(LAST_DEVICE_NAME_KEY, name);
PlayerPrefs.Save();
Log($"保存设备连接记录: {name} [{normalizedAddress}]");
}
/// <summary>
/// 清除设备连接记录
/// </summary>
public void ClearLastConnectedDevice()
{
PlayerPrefs.DeleteKey(LAST_DEVICE_ADDRESS_KEY);
PlayerPrefs.DeleteKey(LAST_DEVICE_NAME_KEY);
PlayerPrefs.Save();
Log("清除设备连接记录");
}
/// <summary>
/// 开始扫描蓝牙设备
@ -299,9 +487,6 @@ namespace Kill.Bluetooth
return;
}
// 取消自动连接,避免干扰手动扫描
CancelInvoke(nameof(TryAutoConnectDelayed));
if (IsScanning)
{
Log("已经在扫描中,先停止当前扫描...");
@ -380,7 +565,6 @@ namespace Kill.Bluetooth
// 取消所有扫描相关的Invoke
CancelInvoke(nameof(StopScan));
CancelInvoke(nameof(DelayedStartScan));
CancelInvoke(nameof(TryAutoConnectDelayed));
BluetoothLEHardwareInterface.StopScan();
Log("停止扫描蓝牙设备");
@ -449,7 +633,7 @@ namespace Kill.Bluetooth
// 保存连接的设备信息
var device = DiscoveredDevices.Find(d => d.Address.ToUpper() == address.ToUpper());
string deviceName = device != null ? device.Name : "Unknown";
SaveLastConnectedDevice(address, deviceName);
//SaveLastConnectedDevice(address, deviceName);
OnConnected?.Invoke(address);
@ -592,7 +776,6 @@ namespace Kill.Bluetooth
// 取消可能冲突的Invoke
CancelInvoke(nameof(StopScan));
CancelInvoke(nameof(DelayedStartScan));
CancelInvoke(nameof(TryAutoConnectDelayed));
// 清理设备列表,为下次扫描做准备
DiscoveredDevices.Clear();
@ -608,10 +791,6 @@ namespace Kill.Bluetooth
{
Log("开始完全重置蓝牙...");
// 保存上一次连接的设备信息
string lastAddress = PlayerPrefs.GetString(LAST_DEVICE_ADDRESS_KEY, "");
string lastName = PlayerPrefs.GetString(LAST_DEVICE_NAME_KEY, "");
// 停止扫描
if (IsScanning)
{
@ -748,6 +927,10 @@ namespace Kill.Bluetooth
var newDevice = new BluetoothDevice(address, name, rssi);
DiscoveredDevices.Add(newDevice);
Log($"发现新设备: {name} [{address}] RSSI: {rssi}");
if (aimMac.ToUpper() == address.ToUpper())
{
Connect(address);
}
OnDeviceFound?.Invoke(newDevice);
}
}
@ -769,5 +952,19 @@ namespace Kill.Bluetooth
Log("蓝牙连接已就绪,可以开始通信");
OnConnectedSuccess?.Invoke();
}
public void ChangeAimMac(string mac)
{
aimMac = mac;
if (IsConnected&& mac.ToUpper() != ConnectedDeviceAddress.ToUpper())
{
Disconnect();
StartScan();
}
else
{
StartScan();
}
}
}
}

View File

@ -214,5 +214,11 @@ namespace Kill.Managers
public int totalAnsweredCount; // 总答题序号(累加)
}
#endregion
[Serializable]
public class BandDeviceRequest
{
public string device_sn;
public string user_id;
}
}

View File

@ -48,7 +48,7 @@ namespace Kill.Managers
PlayerPrefs.DeleteKey("token");
PlayerPrefs.DeleteKey("userData");
}
public async Task TokenLogin()
public async Task<bool> TokenLogin()
{
LoadingUI.Show();
@ -57,18 +57,23 @@ namespace Kill.Managers
// 获取用户详情
var response = await NetworkCtrl.Instance.Post<LoginResponse>("/api/v1/auth/token-login");
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
SetToken(data.data.token,data.data.user);
}
);
if(response.Data.code==200)
{
SetToken(response.Data.data.token,response.Data.data.user);
return true;
}
else
{
ClearInfo();
return false;
}
}
catch (Exception ex)
{
LoadingUI.Hide();
Debug.LogError($"TokenLogin 异常: {ex.Message}");
return false;
}
}
}

View File

@ -67,6 +67,12 @@ namespace Kill.Network
Instance = this;
localPath = Application.persistentDataPath;
streamingPath = Application.streamingAssetsPath;
// 设置目标帧率为 60 FPS
Application.targetFrameRate = 60;
// 禁用垂直同步,允许更高帧率
QualitySettings.vSyncCount = 0;
}
async void Start()
@ -521,7 +527,7 @@ namespace Kill.Network
}
else
{
ToastUI.ShowText("资源更新失败");
ToastUI.ShowText("resource error");
Debug.LogError("资源更新失败");
}
}

View File

@ -686,7 +686,7 @@ namespace Kill.UI.Pages
UpdateStatus("正在查询设备注册状态...");
Log("发送查询注册状态命令 (0x01)");
BLECommunicationManager.Instance.QueryRegistrationStatus((status) =>
BLECommunicationManager.Instance.QueryRegistrationStatus((success,status) =>
{
Loom.QueueOnMainThread(() =>
{

View File

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

View File

@ -0,0 +1,494 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Kill.Bluetooth;
using Kill.Core;
using Kill.Managers;
using Kill.Network;
using Kill.UI;
using Kill.UI.Components;
using Kill.UI.Pages;
using UnityEngine;
using UnityEngine.UI;
public class ConnectDevicePageCtrl : MonoBehaviour
{
/// <summary>
/// 0连接 1 失败 2 成功 3 选择wifi
/// </summary>
public GameObject[] sonPages;
public GameObject topBar;
public string blueToothNameKeyWord;
private List<BluetoothDevice> deviceList = new List<BluetoothDevice>();
public Button backButton;
public Button skipButton;
public GameObject titleText;
public GameObject scanningIcon;
void Start()
{
BluetoothManager.Instance.OnDeviceFound += OnDeviceFound;
BluetoothManager.Instance.OnConnectedSuccess += OnDeviceConnected;
BluetoothManager.Instance.OnConnectFailed += OnConnectFailed;
BluetoothManager.Instance.OnDisconnected += OnDeviceDisconnected;
EnterConnectPage();
}
void OnDestroy()
{
BluetoothManager.Instance.OnDeviceFound -= OnDeviceFound;
BluetoothManager.Instance.OnConnectedSuccess -= OnDeviceConnected;
BluetoothManager.Instance.OnConnectFailed -= OnConnectFailed;
BluetoothManager.Instance.OnDisconnected -= OnDeviceDisconnected;
}
public void EnterConnectPage()
{
OnStopScanClick();
if(BluetoothManager.Instance.IsConnected)
BluetoothManager.Instance.Disconnect();
topBar.SetActive(true);
titleText.SetActive(false);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(BackToHomePage);
backButton.gameObject.SetActive(true);
skipButton.gameObject.SetActive(false);
foreach(GameObject g in sonPages)
g.gameObject.SetActive(false);
sonPages[0].SetActive(true);
UIManager.Instance.RegisterBackAction(BackToHomePage);
OnScanClick();
}
public GameObject qrCodePlane;
public void ScanQrCode()
{
qrCodePlane.SetActive(true);
qrCodePlane.GetComponent<ScanQRcode>().OnQRCodeScanned+=GetQrResult;
}
public void GetQrResult(string result)
{
BluetoothManager.Instance.Connect(result);
LoadingUI.Show();
qrCodePlane.SetActive(false);
nowDeviceMac=result;
}
string errorTip="";
private void ShowErrorPage()
{
if(BluetoothManager.Instance.IsConnected)
BluetoothManager.Instance.Disconnect();
topBar.SetActive(false);
foreach(GameObject g in sonPages)
g.gameObject.SetActive(false);
sonPages[1].SetActive(true);
Text errorText=sonPages[1].transform.Find("提示").GetComponent<Text>();
if(errorTip!="")
{
errorText.text=LanguageManager.Instance.GetLanguage(errorTip);
}
else
{
errorText.text=LanguageManager.Instance.GetLanguage("100069");
}
UIManager.Instance.RegisterBackAction(EnterConnectPage);
LoadingUI.Hide();
}
public InputField wifiNameInput;
public InputField wifiPasswordInput;
public void ShowWifiPage()
{
topBar.SetActive(true);
titleText.SetActive(true);
backButton.gameObject.SetActive(false);
UIManager.Instance.ClearBackAction();
skipButton.gameObject.SetActive(true);
foreach(GameObject g in sonPages)
g.gameObject.SetActive(false);
sonPages[3].SetActive(true);
// 获取当前 WiFi 名称
string wifiName = GetCurrentWiFiName();
wifiNameInput.text = wifiName ?? "";
wifiPasswordInput.text="";
}
/// <summary>
/// 确认配置 WiFi
/// </summary>
public void OnWifiConfirmClick()
{
string ssid = wifiNameInput.text.Trim();
string password = wifiPasswordInput.text;
if (string.IsNullOrEmpty(ssid))
{
ToastUI.ShowText(LanguageManager.Instance.GetLanguage("100071") ?? "请输入WiFi名称");
return;
}
// 创建 WiFi 配置
var wifiControl = new Kill.Bluetooth.Protocol.WIFIControl
{
Enable = true,
SSID = ssid,
Password = password
};
LoadingUI.Show();
// 发送 WiFi 配置到设备
BLECommunicationManager.Instance.WriteWIFIControl(wifiControl, (success) =>
{
Loom.QueueOnMainThread(() =>
{
LoadingUI.Hide();
if (success)
{
UnityEngine.Debug.Log("WiFi 配置成功");
ShowSuccessPage();
}
else
{
ToastUI.ShowText(LanguageManager.Instance.GetLanguage("100072") ?? "WiFi配置失败");
}
});
});
}
/// <summary>
/// 0不可点击 1可点击
/// </summary>
public GameObject[] wifiConfirmButtons;
public void CheckWifiNameAndPassword()
{
string ssid = wifiNameInput.text.Trim();
string password = wifiPasswordInput.text;
if(string.IsNullOrEmpty(ssid) || string.IsNullOrEmpty(password))
{
wifiConfirmButtons[0].SetActive(true);
wifiConfirmButtons[1].SetActive(false);
}
else
{
wifiConfirmButtons[0].SetActive(false);
wifiConfirmButtons[1].SetActive(true);
}
}
/// <summary>
/// 获取当前连接的 WiFi 名称
/// </summary>
private string GetCurrentWiFiName()
{
#if UNITY_ANDROID && !UNITY_EDITOR
try
{
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
using (AndroidJavaObject wifiManager = currentActivity.Call<AndroidJavaObject>("getSystemService", "wifi"))
{
if (wifiManager == null) return null;
using (AndroidJavaObject wifiInfo = wifiManager.Call<AndroidJavaObject>("getConnectionInfo"))
{
if (wifiInfo == null) return null;
string ssid = wifiInfo.Call<string>("getSSID");
if (!string.IsNullOrEmpty(ssid) && ssid != "<unknown ssid>")
{
return ssid.Trim('"');
}
}
}
}
catch (System.Exception ex)
{
Debug.LogError($"获取 WiFi 名称失败: {ex.Message}");
}
return null;
#elif UNITY_IOS && !UNITY_EDITOR
// iOS 调用原生插件
return GetWiFiNameIOS();
#else
return "Editor_WiFi"; // 编辑器返回模拟值
#endif
}
#if UNITY_IOS && !UNITY_EDITOR
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern System.IntPtr GetWiFiSSID();
/// <summary>
/// iOS 获取 WiFi 名称
/// </summary>
private string GetWiFiNameIOS()
{
try
{
System.IntPtr ptr = GetWiFiSSID();
if (ptr == System.IntPtr.Zero)
{
return null;
}
string ssid = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(ptr);
// 释放内存
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr);
return ssid;
}
catch (System.Exception ex)
{
Debug.LogError($"iOS 获取 WiFi 名称失败: {ex.Message}");
return null;
}
}
#endif
public void ShowSuccessPage()
{
topBar.SetActive(false);
foreach(GameObject g in sonPages)
g.gameObject.SetActive(false);
sonPages[2].SetActive(true);
UIManager.Instance.RegisterBackAction(EnterConnectPage);
}
private void OnDeviceFound(BluetoothDevice device)
{
if(string.IsNullOrEmpty(device.Name))
return;
AddOneDevice(device);
}
private void OnDeviceConnected()
{
if (selectedIndex >= 0 && selectedIndex < deviceObjects.Count)
{
deviceObjects[selectedIndex].transform.Find("状态").Find("loading").gameObject.SetActive(false);
deviceObjects[selectedIndex].transform.Find("状态").Find("成功").gameObject.SetActive(true);
}
// 延迟 500ms 再查询,确保 BLE 连接完全就绪
StartCoroutine(DelayedQueryRegistration());
isconnecting =false;
}
/// <summary>
/// 延迟查询注册状态
/// </summary>
private System.Collections.IEnumerator DelayedQueryRegistration()
{
yield return new WaitForSeconds(0.5f);
OnQueryRegistrationClick();
}
private void OnConnectFailed(string address)
{
if(!isconnecting)
return;
errorTip="100069";
ShowErrorPage();
isconnecting=false;
}
private void OnDeviceDisconnected(string address)
{
// UpdateStatus($"已断开连接: {address}");
// if (deviceStatusText != null)
// deviceStatusText.text = "未连接";
}
public List<GameObject> deviceObjects;
/// <summary>
/// 开始扫描
/// </summary>
public void OnScanClick()
{
scanningIcon.SetActive(true);
devicePrefab.SetActive(false);
if (BluetoothManager.Instance != null)
{
// 清空列表
deviceList.Clear();
if (deviceObjects != null && deviceObjects.Count > 0)
{
foreach (var item in deviceObjects)
{
Destroy(item);
}
deviceObjects.Clear();
}
deviceObjects = new List<GameObject>();
BluetoothManager.Instance.StartScan(999f); // 扫描999秒
}
}
public GameObject deviceListParent;
public GameObject devicePrefab;
public GameObject deviceListUi;
bool isconnecting=false;
public void AddOneDevice(BluetoothDevice device)
{
if (deviceList.Contains(device))
return;
if(!device.Name.Contains(blueToothNameKeyWord))
return;
if(!deviceListUi.activeSelf)
deviceListUi.SetActive(true);
deviceList.Add(device);
GameObject deviceObject = Instantiate(devicePrefab, deviceListParent.transform);
deviceObject.transform.Find("name").GetComponent<Text>().text=device.Name;
deviceObject.SetActive(true);
deviceObjects.Add(deviceObject);
int index = deviceObjects.Count-1;
deviceObject.GetComponent<Button>().onClick.AddListener(() =>ClickOneDevice(index));
isconnecting=true;
}
int selectedIndex=-1;
string nowDeviceMac="";
public void ClickOneDevice(int index)
{
if (BluetoothManager.Instance == null) return;
OnStopScanClick();
selectedIndex = index;
if (selectedIndex >= 0 && selectedIndex < deviceList.Count)
{
var device = deviceList[selectedIndex];
Debug.Log("设备mac:"+device.Address);
nowDeviceMac=device.Address;
BluetoothManager.Instance.Connect(device.Address);
LoadingUI.Show();
deviceObjects[index].transform.Find("状态").Find("loading").gameObject.SetActive(true);
}
}
/// <summary>
/// 停止扫描
/// </summary>
public void OnStopScanClick()
{
scanningIcon.SetActive(false);
if (BluetoothManager.Instance != null)
{
BluetoothManager.Instance.StopScan();
}
}
/// <summary>
/// 查询设备注册状态
/// </summary>
private void OnQueryRegistrationClick()
{
BLECommunicationManager.Instance.QueryRegistrationStatus((success,status) =>
{
Loom.QueueOnMainThread(() =>
{
if (success)
{
bool IsRegistered = status.IsRegistered;
if (IsRegistered)
{
errorTip = "100070";
ShowErrorPage();
}
else
{
BandDevice();
}
}
else
{
errorTip = "100069";
ShowErrorPage();
}
});
});
}
/// <summary>
/// 注册设备
/// </summary>
private void OnRegisterDeviceClick()
{
string username = DataManager.Instance.userInfo.id;
BLECommunicationManager.Instance.RegisterDevice(username, (success, message) =>
{
Loom.QueueOnMainThread(() =>
{
LoadingUI.Hide();
if (success)
{
ShowWifiPage();
}
else
{
errorTip = "100070";
ShowErrorPage();
}
});
});
}
/// <summary>
/// 注销用户
/// </summary>
private void OnUnregisterUserClick()
{
string username = DataManager.Instance.userInfo.id;
BLECommunicationManager.Instance.UnregisterUser(username, (response) =>
{
Loom.QueueOnMainThread(() =>
{
if (response.IsSuccess)
{
Debug.Log($"用户 {username} 注销成功!");
}
else
{
OnUnregisterUserClick();
}
});
});
}
public void BackToHomePage()
{
OnStopScanClick();
UIManager.Instance.OpenPage(UIManager.PageName.homePage);
}
/// <summary>
/// 绑定设备
/// </summary>
public async void BandDevice()
{
LoadingUI.Show();
try
{
BandDeviceRequest request = new BandDeviceRequest
{
device_sn = nowDeviceMac,
user_id = DataManager.Instance.userInfo.id,
};
Debug.Log($"绑定设备请求: deviceSn={request.device_sn}, userId={request.user_id}");
var response = await NetworkCtrl.Instance.Post<NoDataResponse>("/api/v1/device/bind", request);
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
onSuccess: (data) =>
{
Debug.Log($"绑定设备成功");
OnRegisterDeviceClick();
}
,
onError: (code,message) =>
{
Debug.Log($"绑定设备失败:{code},{message}");
errorTip = "100070";
ShowErrorPage();
}
);
}
catch (Exception ex)
{
LoadingUI.Hide();
Debug.LogError($"绑定设备异常: {ex.Message}");
}
}
}

View File

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

View File

@ -0,0 +1,51 @@
using System;
using UnityEngine;
namespace Kill.UI.Pages
{
/// <summary>
/// 原生二维码扫描 - 调用系统相机扫码
/// </summary>
public class NativeQRScanner : MonoBehaviour
{
// 扫码结果回调
public event Action<string> OnQRCodeScanned;
/// <summary>
/// 开始扫码
/// </summary>
public void StartScan()
{
#if UNITY_EDITOR
// 编辑器模拟
Debug.Log("[NativeQRScanner] 编辑器模式,模拟扫码");
// 可以弹窗输入测试
#elif UNITY_ANDROID
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
using (AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "com.google.zxing.client.android.SCAN"))
{
intent.Call<AndroidJavaObject>("putExtra", "SCAN_MODE", "QR_CODE_MODE");
currentActivity.Call("startActivityForResult", intent, 0);
}
#elif UNITY_IOS
// iOS 需要写原生插件
_StartScanIOS();
#endif
}
#if UNITY_IOS
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern void _StartScanIOS();
#endif
/// <summary>
/// 接收扫码结果(从原生回调)
/// </summary>
public void OnScanResult(string result)
{
Debug.Log($"[NativeQRScanner] 扫码结果: {result}");
OnQRCodeScanned?.Invoke(result);
}
}
}

View File

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

View File

@ -0,0 +1,319 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Kill.UI.Components;
using UnityEngine;
using UnityEngine.UI;
namespace Kill.UI.Pages
{
/// <summary>
/// 二维码扫描器 - 调用摄像头扫描二维码
/// </summary>
public class ScanQRcode : MonoBehaviour
{
[Header("UI组件")]
public RawImage cameraPreview; // 摄像头预览
[Header("扫描设置")]
public float scanInterval = 0.2f; // 扫描间隔(秒)
// 摄像头相关
private WebCamTexture webCamTexture;
private bool isScanning = false;
// 扫描结果回调
public event Action<string> OnQRCodeScanned;
void OnEnable()
{
StartScan();
}
void OnDisable()
{
StopScan();
}
/// <summary>
/// 开始扫描
/// </summary>
public void StartScan()
{
if (isScanning) return;
StartCoroutine(InitializeCamera());
}
/// <summary>
/// 停止扫描
/// </summary>
public void StopScan()
{
isScanning = false;
StopAllCoroutines();
if (webCamTexture != null && webCamTexture.isPlaying)
{
webCamTexture.Stop();
webCamTexture = null;
}
}
/// <summary>
/// 关闭扫码界面
/// </summary>
public void Close()
{
StopScan();
gameObject.SetActive(false);
}
/// <summary>
/// 初始化摄像头
/// </summary>
private IEnumerator InitializeCamera()
{
// Android 使用 Permission API 请求权限
#if UNITY_ANDROID && !UNITY_EDITOR
if (!UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.Camera))
{
UnityEngine.Android.Permission.RequestUserPermission(UnityEngine.Android.Permission.Camera);
// 等待权限请求结果
yield return new WaitUntil(() => UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.Camera));
}
if (!UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.Camera))
{
UpdateStatus("100085");
yield break;
}
#else
// 其他平台使用传统方式
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (!Application.HasUserAuthorization(UserAuthorization.WebCam))
{
UpdateStatus("100085");
yield break;
}
#endif
// 获取后置摄像头
WebCamDevice[] devices = WebCamTexture.devices;
if (devices.Length == 0)
{
UpdateStatus("100086");
yield break;
}
// 优先使用后置摄像头
string deviceName = devices[0].name;
for (int i = 0; i < devices.Length; i++)
{
if (!devices[i].isFrontFacing)
{
deviceName = devices[i].name;
break;
}
}
// 创建摄像头纹理
webCamTexture = new WebCamTexture(deviceName, 1280, 720, 30);
cameraPreview.texture = webCamTexture;
// 开始播放
webCamTexture.Play();
// 等待摄像头启动
yield return new WaitUntil(() => webCamTexture.width > 100);
// 调整预览画面比例
AdjustPreviewAspect();
isScanning = true;
// 开始扫描
StartCoroutine(ScanCoroutine());
}
/// <summary>
/// 调整预览画面比例
/// </summary>
private void AdjustPreviewAspect()
{
if (webCamTexture == null) return;
float videoRatio = (float)webCamTexture.width / webCamTexture.height;
float screenRatio = (float)Screen.width / Screen.height;
// 根据摄像头方向调整
int rotation = webCamTexture.videoRotationAngle;
cameraPreview.rectTransform.localEulerAngles = new Vector3(0, 0, -rotation);
// 调整缩放以适应屏幕
if (rotation == 90 || rotation == 270)
{
videoRatio = 1f / videoRatio;
}
// 保持比例填充
if (videoRatio > screenRatio)
{
cameraPreview.rectTransform.localScale = new Vector3(screenRatio / videoRatio, 1, 1);
}
else
{
cameraPreview.rectTransform.localScale = new Vector3(1, videoRatio / screenRatio, 1);
}
}
/// <summary>
/// 扫描协程
/// </summary>
private IEnumerator ScanCoroutine()
{
// 等待一帧确保摄像头已准备好
yield return null;
while (isScanning && webCamTexture != null && webCamTexture.isPlaying)
{
// 获取当前帧
Texture2D snapshot = GetSnapshot();
if (snapshot != null)
{
// 解析二维码
string result = DecodeQRCode(snapshot);
Destroy(snapshot);
if (!string.IsNullOrEmpty(result))
{
// 从结果中提取 MAC 地址
string macAddress = ExtractMacAddress(result);
if (!string.IsNullOrEmpty(macAddress))
{
// 扫描成功,仅回传 MAC 地址
OnQRCodeScanned?.Invoke(macAddress);
yield break;
}
else
{
// 二维码不符合要求,显示提示
UpdateStatus("100084");
}
}
}
yield return new WaitForSeconds(scanInterval);
}
}
/// <summary>
/// 获取摄像头当前帧
/// </summary>
private Texture2D GetSnapshot()
{
if (webCamTexture == null || !webCamTexture.isPlaying) return null;
try
{
Texture2D snapshot = new Texture2D(webCamTexture.width, webCamTexture.height);
snapshot.SetPixels(webCamTexture.GetPixels());
snapshot.Apply();
return snapshot;
}
catch
{
return null;
}
}
/// <summary>
/// 解析二维码
/// </summary>
private string DecodeQRCode(Texture2D texture)
{
try
{
int width = texture.width;
int height = texture.height;
// 获取像素数据
Color32[] pixels = texture.GetPixels32();
// 转换为灰度图
byte[] grayscale = new byte[width * height];
for (int i = 0; i < pixels.Length; i++)
{
// 使用标准亮度公式: Y = 0.299R + 0.587G + 0.114B
grayscale[i] = (byte)(0.299f * pixels[i].r + 0.587f * pixels[i].g + 0.114f * pixels[i].b);
}
// 创建 LuminanceSource
var luminanceSource = new ZXing.PlanarYUVLuminanceSource(
grayscale,
width,
height,
0,
0,
width,
height,
false
);
// 创建 BinaryBitmap
var binarizer = new ZXing.Common.HybridBinarizer(luminanceSource);
var binaryBitmap = new ZXing.BinaryBitmap(binarizer);
// 解码
var reader = new ZXing.QrCode.QRCodeReader();
var hints = new Dictionary<ZXing.DecodeHintType, object>
{
{ ZXing.DecodeHintType.TRY_HARDER, true }
};
var result = reader.decode(binaryBitmap, hints);
return result?.Text;
}
catch (Exception ex)
{
Debug.LogError($"二维码解析失败: {ex.Message}");
return null;
}
}
/// <summary>
/// 从字符串中提取 MAC 地址(格式如 98:EA:A0:02:4E:06
/// </summary>
private string ExtractMacAddress(string input)
{
if (string.IsNullOrEmpty(input))
return null;
// MAC 地址正则表达式:匹配 XX:XX:XX:XX:XX:XX 格式X 为十六进制字符)
System.Text.RegularExpressions.Regex macRegex =
new System.Text.RegularExpressions.Regex(@"[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}");
System.Text.RegularExpressions.Match match = macRegex.Match(input);
if (match.Success)
{
// 返回大写的 MAC 地址
return match.Value.ToUpper();
}
return null;
}
/// <summary>
/// 更新状态文字
/// </summary>
private void UpdateStatus(string code)
{
ToastUI.Show(code);
}
void OnDestroy()
{
StopScan();
gameObject.SetActive(false);
}
}
}

View File

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

View File

@ -78,8 +78,8 @@ namespace Kill.UI.Pages
}
}
/// <summary>
/// 从服务器加载全部题目
/// <summary>
/// 完成考试
/// </summary>
public async void ExamCompletion()
{
@ -87,7 +87,6 @@ namespace Kill.UI.Pages
try
{
// 调用获取题目列表接口,获取全部题目
var response = await NetworkCtrl.Instance.Post<NoDataResponse>("/api/v1/exam/completion");
LoadingUI.Hide();
ResponseCodeHandler.HandleResponse(response,
@ -137,7 +136,6 @@ namespace Kill.UI.Pages
}
public void BackAction()
{
ToastUI.ShowText("返回");
UIManager.Instance.OpenPage(UIManager.PageName.homePage,null,true);
}
}

View File

@ -124,8 +124,11 @@ namespace Kill.UI
}
else
{
await DataManager.Instance.TokenLogin();
OpenPage(PageName.homePage, null, true);
bool hasToken=await DataManager.Instance.TokenLogin();
if(hasToken)
OpenPage(PageName.homePage, null, true);
else
OpenPage(PageName.loginPage);
}
}

Binary file not shown.

View File

@ -0,0 +1,31 @@
ManifestFileVersion: 0
CRC: 256577813
AssetBundleManifest:
AssetBundleInfos:
Info_0:
Name: ui_homepage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_1:
Name: common.ab
Dependencies: {}
Info_2:
Name: language.ab
Dependencies: {}
Info_3:
Name: ui_common.ab
Dependencies:
Dependency_0: ui_loginpage.ab
Info_4:
Name: ui_loginpage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_5:
Name: ui_safetylearningpage.ab
Dependencies:
Dependency_0: ui_common.ab
Info_6:
Name: ui_connectdevicepage.ab
Dependencies:
Dependency_0: common.ab
Dependency_1: ui_common.ab

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 8efc0a24208a4ad4199a43f0fff4f33d
guid: bfeac3e50a0ed524bb50d8407c4ad613
DefaultImporter:
externalObjects: {}
userData:

View File

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

Binary file not shown.

View File

@ -1,66 +1,21 @@
ManifestFileVersion: 0
CRC: 233218370
CRC: 374579679
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c80e189aa6f9c8d7ee6bc50f7300305d
Hash: 23b30b8b7538d15e7e1f5c745bb57c50
TypeTreeHash:
serializedVersion: 2
Hash: be157f972cb3f854d77a3240d64a7387
Hash: 958b54fb77cc0a35b3bf79f07d0e96ea
IncrementalBuildHash:
serializedVersion: 2
Hash: c80e189aa6f9c8d7ee6bc50f7300305d
Hash: 23b30b8b7538d15e7e1f5c745bb57c50
HashAppended: 0
ClassTypes:
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 74
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FaceInfo_Legacy
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FontAssetCreationSettings
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.KerningTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_Character
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontFeatureTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontWeightPair
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphPairAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphValueRecord
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.FaceInfo
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.Glyph
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphMetrics
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphRect
SerializeReferenceClassIdentifiers: []
Assets:
- Assets/Res/common/LiberationSans SDF - Drop Shadow.mat
- Assets/Res/common/TMP_SDF-Mobile.shader
- Assets/Res/common/LiberationSans SDF - Fallback.asset
- Assets/Res/common/LiberationSans SDF - Outline.mat
- Assets/Res/common/loadingNew.anim
- Assets/Res/common/loading.anim
- Assets/Res/common/MiSans-Medium.ttf
- Assets/Res/common/MiSans-Medium SDF.asset
- Assets/Res/common/LiberationSans SDF.asset
- Assets/Res/common/LiberationSans.ttf
Dependencies: []

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c24a7550296d5d54d91f866dd40936db
guid: d01210176d312724abe424f9e0706b83
TextScriptImporter:
externalObjects: {}
userData:

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 749593259
CRC: 142284609
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 81a8de0bb4c5928c43220b249b335c6b
Hash: 98e62aa9d1a917725e16d689a36329b2
TypeTreeHash:
serializedVersion: 2
Hash: 5ad585dd02dfb5016c0dad519eab8f49
IncrementalBuildHash:
serializedVersion: 2
Hash: 81a8de0bb4c5928c43220b249b335c6b
Hash: 98e62aa9d1a917725e16d689a36329b2
HashAppended: 0
ClassTypes:
- Class: 49

View File

@ -1,55 +1,75 @@
{
"version": "1.0.1",
"version": "1.0.0",
"assetbundles": [
{
"name": "common.ab",
"size": 12854223,
"md5": "c2fa51b131e3d8a65d4134c8670ee99b"
"size": 4149,
"md5": "6bffb017f95228475917b37052e012b5"
},
{
"name": "language.ab",
"size": 2226,
"md5": "6e10d9c8c23778a25684dd8d69350510"
"size": 4575,
"md5": "42dc603fabf00795994e2e06fa035234"
},
{
"name": "ui_common.ab",
"size": 12606,
"md5": "1dfaf11957a90b775e0be5f6fe37452b"
"size": 381825,
"md5": "f4d664ac4e17eaeca0ad04ce6db80533"
},
{
"name": "ui_connectdevicepage.ab",
"size": 53652,
"md5": "eba6cdc3aeab75162c82c6f8d7c1feca"
},
{
"name": "ui_homepage.ab",
"size": 9787,
"md5": "4c4595943f5c31673338e2ca83147ee8"
"size": 1241443,
"md5": "cac757cae980de60feadb066719f1172"
},
{
"name": "ui_loginpage.ab",
"size": 241923,
"md5": "520989d12bfdae3368c3fd88f8381d3e"
"size": 238816,
"md5": "65a43b0e0936cf36e992d185bbc36b8b"
},
{
"name": "ui_safetylearningpage.ab",
"size": 144194,
"md5": "0513ab30e2cdebd0cfb3ccdbb9204688"
},
{
"name": "common.ab.manifest",
"size": 2173,
"md5": "7f35fb8fc14986f31d17c6483a90b4f3"
"size": 506,
"md5": "6755e41e58a4d23f328dd46d1822f4d5"
},
{
"name": "language.ab.manifest",
"size": 473,
"md5": "335cc7d7481861141ee8e6fff52f3976"
"md5": "4aa993facac5dc7e23e95870ba621c51"
},
{
"name": "ui_common.ab.manifest",
"size": 2905,
"md5": "a05683fbffe6068095d6b7ef877f0ef4"
"size": 4592,
"md5": "9c454b18639c86108a26d2018b5234c7"
},
{
"name": "ui_connectdevicepage.ab.manifest",
"size": 3786,
"md5": "d34af45d99fb0bc976e0b2a906d28a9c"
},
{
"name": "ui_homepage.ab.manifest",
"size": 2419,
"md5": "c3971548d08125ef72bade017cebabdc"
"size": 2252,
"md5": "d4c7113c74565bb0e3a1d91bae3f313b"
},
{
"name": "ui_loginpage.ab.manifest",
"size": 4757,
"md5": "99941302876547c4759f674f80fee5db"
"size": 4454,
"md5": "0dc94595c1a8470faa832afa9c87666a"
},
{
"name": "ui_safetylearningpage.ab.manifest",
"size": 5165,
"md5": "b1a85a84cd9496ec871d8b24d0dbb79a"
}
]
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e56d42cf285d10847a9084054c83be13
guid: 84abb08dd6d2e3f4988e8f3f85b04262
DefaultImporter:
externalObjects: {}
userData:

View File

@ -0,0 +1,75 @@
{
"version": "1.0.0",
"assetbundles": [
{
"name": "common.ab",
"size": 4149,
"md5": "6bffb017f95228475917b37052e012b5"
},
{
"name": "language.ab",
"size": 4575,
"md5": "42dc603fabf00795994e2e06fa035234"
},
{
"name": "ui_common.ab",
"size": 381825,
"md5": "f4d664ac4e17eaeca0ad04ce6db80533"
},
{
"name": "ui_connectdevicepage.ab",
"size": 53619,
"md5": "07c34734c98163f4f2e4a8c62b5a173d"
},
{
"name": "ui_homepage.ab",
"size": 1241443,
"md5": "cac757cae980de60feadb066719f1172"
},
{
"name": "ui_loginpage.ab",
"size": 238816,
"md5": "65a43b0e0936cf36e992d185bbc36b8b"
},
{
"name": "ui_safetylearningpage.ab",
"size": 144194,
"md5": "0513ab30e2cdebd0cfb3ccdbb9204688"
},
{
"name": "common.ab.manifest",
"size": 506,
"md5": "6755e41e58a4d23f328dd46d1822f4d5"
},
{
"name": "language.ab.manifest",
"size": 473,
"md5": "4aa993facac5dc7e23e95870ba621c51"
},
{
"name": "ui_common.ab.manifest",
"size": 4592,
"md5": "9c454b18639c86108a26d2018b5234c7"
},
{
"name": "ui_connectdevicepage.ab.manifest",
"size": 3786,
"md5": "34176002c1ff7a29873e053d322b2b86"
},
{
"name": "ui_homepage.ab.manifest",
"size": 2252,
"md5": "d4c7113c74565bb0e3a1d91bae3f313b"
},
{
"name": "ui_loginpage.ab.manifest",
"size": 4454,
"md5": "0dc94595c1a8470faa832afa9c87666a"
},
{
"name": "ui_safetylearningpage.ab.manifest",
"size": 5165,
"md5": "b1a85a84cd9496ec871d8b24d0dbb79a"
}
]
}

Binary file not shown.

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 714414049
CRC: 2161279840
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 1153a9a71c2079962f868c3866d681ad
Hash: 4ea1223b61d0b2425614da34c0e9dd5c
TypeTreeHash:
serializedVersion: 2
Hash: 24e7573d98028b3cc7bcae0654eab5fa
Hash: 3d0aa9280e2017137102b2dcf180d097
IncrementalBuildHash:
serializedVersion: 2
Hash: 1153a9a71c2079962f868c3866d681ad
Hash: 4ea1223b61d0b2425614da34c0e9dd5c
HashAppended: 0
ClassTypes:
- Class: 1
@ -21,15 +21,15 @@ ClassTypes:
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
Script: {fileID: 11500000, guid: 767fbd85f067c1a4da213c13282cc05e, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 767fbd85f067c1a4da213c13282cc05e, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
@ -49,12 +49,38 @@ ClassTypes:
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FaceInfo_Legacy
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.FontAssetCreationSettings
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.KerningTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_Character
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontFeatureTable
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_FontWeightPair
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphPairAdjustmentRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.TMP_GlyphValueRecord
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.VertexGradient
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.FaceInfo
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.Glyph
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphMetrics
- AssemblyName: UnityEngine.TextCoreFontEngineModule
ClassName: UnityEngine.TextCore.GlyphRect
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
@ -76,10 +102,24 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/common/\u9009\u53D6\u5934\u50CF.prefab"
- "Assets/Res/ui/common/\u8FD4\u56DE.png"
- "Assets/Res/ui/common/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/common/\u9A8C\u8BC1\u7801\u7EC4\u4EF6.prefab"
- Assets/Res/ui/common/Rectangle 132 (2).png
- "Assets/Res/ui/common/\u5C0F\u6309\u94AE.png"
- "Assets/Res/ui/common/Check-small (\u6821\u9A8C-\u5C0F).png"
- "Assets/Res/ui/common/\u9009\u53D6\u5934\u50CF.prefab"
- "Assets/Res/ui/common/\u6307\u7EB9.png"
- "Assets/Res/ui/common/\u8FD4\u56DE.png"
- "Assets/Res/ui/common/Right (\u53F3) (1).png"
- Assets/Res/ui/common/Loading.png
- "Assets/Res/ui/common/\u89C6\u9891.png"
- "Assets/Res/ui/common/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/common/\u58F0\u97F3.png"
- "Assets/Res/ui/common/\u8BBE\u5907\u540D\u6B21.png"
- Assets/Res/ui/common/Rectangle 148 (1).png
- "Assets/Res/ui/common/\u5BC6\u7801 - \u5C55\u793A.png"
- Assets/Res/ui/common/Rectangle 148.png
- "Assets/Res/ui/common/Close (\u5173\u95ED).png"
- Assets/Res/ui/common/Ellipse 32.png
- "Assets/Res/ui/common/\u5B9A\u65F6.png"
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_loginpage.ab

Binary file not shown.

View File

@ -0,0 +1,106 @@
ManifestFileVersion: 0
CRC: 1954010819
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c0f0a227dcda8c2fa20631441d246eaa
TypeTreeHash:
serializedVersion: 2
Hash: f416264907a65aa92adeeb00bf60fec2
IncrementalBuildHash:
serializedVersion: 2
Hash: c0f0a227dcda8c2fa20631441d246eaa
HashAppended: 0
ClassTypes:
- Class: 1
Script: {instanceID: 0}
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 74
Script: {instanceID: 0}
- Class: 111
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 2f6d707cba0376a43bc6d9f0a27ea376, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: cc4db0165ab541a44978ccde28b3bc29, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
- Class: 213
Script: {instanceID: 0}
- Class: 222
Script: {instanceID: 0}
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Button/ButtonClickedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/EndEditEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/OnChangeEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/SubmitEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Navigation
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ScrollRect/ScrollRectEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- Assets/Res/ui/connectdevicepage/Frame 19.png
- Assets/Res/ui/connectdevicepage/icon.png
- Assets/Res/ui/connectdevicepage/Rectangle 132 (3).png
- Assets/Res/ui/connectdevicepage/Frame 20.png
- "Assets/Res/ui/connectdevicepage/\u786E\u8BA4.png"
- Assets/Res/ui/connectdevicepage/connectDevicePage.prefab
- Assets/Res/ui/connectdevicepage/Rectangle 136.png
- "Assets/Res/ui/connectdevicepage/\u626B\u63CF.png"
- Assets/Res/ui/connectdevicepage/Vector.png
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 4e4b248a1ea1d1647b673d83229260a8
guid: 489d03fc6785b9a499ffe111ede1101b
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 92d0cbb4b3e260c4fb37b1f2def9aacd
guid: b0da6655dcf15ff4fbe7e917f7c71dff
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 3121207904
CRC: 2873620311
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c751eb049ed9e8f8eb1a7678ce2327e6
Hash: a5e8163239fbf5550ab3beedb10929b1
TypeTreeHash:
serializedVersion: 2
Hash: 2da964eb972714674342a2708c4b8066
Hash: 252cf1d368eeed7b0aa25c6e638ef9a7
IncrementalBuildHash:
serializedVersion: 2
Hash: c751eb049ed9e8f8eb1a7678ce2327e6
Hash: a5e8163239fbf5550ab3beedb10929b1
HashAppended: 0
ClassTypes:
- Class: 1
@ -24,14 +24,10 @@ ClassTypes:
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 7fdaf0aeaf14a6d4c9beb4770e903acf, type: 3}
- Class: 115
@ -45,10 +41,12 @@ ClassTypes:
- Class: 224
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: Unity.TextMeshPro
ClassName: TMPro.VertexGradient
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
@ -57,12 +55,6 @@ SerializeReferenceClassIdentifiers:
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/EndEditEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/OnChangeEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.InputField/SubmitEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
@ -70,6 +62,9 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/homepage/\u65E0\u8BBE\u5907.png"
- Assets/Res/ui/homepage/homePage.prefab
- "Assets/Res/ui/homepage/\u4E2A\u4EBA\u4E2D\u5FC3.png"
- "Assets/Res/ui/homepage/\u6D88\u606F.png"
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/common.ab
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

@ -1,15 +1,15 @@
ManifestFileVersion: 0
CRC: 4028950989
CRC: 1506138910
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 59dce4d2a0ce9e0ae41212946c77f075
Hash: 111b08c284632c8965632707d85adb47
TypeTreeHash:
serializedVersion: 2
Hash: 70589c2c13c216b3c5fa3022c1dc899e
Hash: 481727e0eda7646426efebfcf2086aca
IncrementalBuildHash:
serializedVersion: 2
Hash: 59dce4d2a0ce9e0ae41212946c77f075
Hash: 111b08c284632c8965632707d85adb47
HashAppended: 0
ClassTypes:
- Class: 1
@ -21,9 +21,13 @@ ClassTypes:
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
Script: {fileID: 11500000, guid: 1a5913bec98c8024087f4dbe7b40ab1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
@ -36,8 +40,6 @@ ClassTypes:
Script: {fileID: 11500000, guid: 271b50f7241504b49a6a7493d13721e7, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: f53257c6334f5224a8c3d192d5653d1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
@ -50,8 +52,6 @@ ClassTypes:
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1a5913bec98c8024087f4dbe7b40ab1c, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
@ -104,23 +104,17 @@ SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Toggle/ToggleEvent
Assets:
- "Assets/Res/ui/loginPage/\u5BC6\u7801 (1) 1.png"
- Assets/Res/ui/loginPage/Rectangle 135.png
- Assets/Res/ui/loginPage/Frame 2 (1).png
- Assets/Res/ui/loginPage/Rectangle 132 (1).png
- "Assets/Res/ui/loginPage/\u9009\u62E9\u6846.png"
- "Assets/Res/ui/loginPage/Check-small (\u6821\u9A8C-\u5C0F).png"
- Assets/Res/ui/loginPage/Group 144.png
- "Assets/Res/ui/loginPage/\u90AE\u7BB1-F 1.png"
- Assets/Res/ui/loginPage/Group 143.png
- "Assets/Res/ui/loginPage/\u9690\u79C1\u534F\u8BAE\u6846.png"
- Assets/Res/ui/loginPage/Rectangle 148 (1).png
- Assets/Res/ui/loginPage/Rectangle 132.png
- Assets/Res/ui/loginPage/Rectangle 148.png
- Assets/Res/ui/loginPage/loginPage.prefab
- "Assets/Res/ui/loginPage/Close (\u5173\u95ED).png"
- Assets/Res/ui/loginPage/bg.png
- Assets/Res/ui/loginPage/Ellipse 32.png
- Assets/Res/ui/loginPage/Rectangle 67.png
- "Assets/Res/ui/loginpage/\u5BC6\u7801 (1) 1.png"
- Assets/Res/ui/loginpage/Rectangle 135.png
- Assets/Res/ui/loginpage/Frame 2 (1).png
- Assets/Res/ui/loginpage/Rectangle 132 (1).png
- Assets/Res/ui/loginpage/Group 144.png
- "Assets/Res/ui/loginpage/\u90AE\u7BB1-F 1.png"
- Assets/Res/ui/loginpage/Group 143.png
- "Assets/Res/ui/loginpage/\u9690\u79C1\u534F\u8BAE\u6846.png"
- Assets/Res/ui/loginpage/Rectangle 132.png
- Assets/Res/ui/loginpage/loginPage.prefab
- Assets/Res/ui/loginpage/bg.png
- Assets/Res/ui/loginpage/Rectangle 67.png
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

Binary file not shown.

View File

@ -0,0 +1,131 @@
ManifestFileVersion: 0
CRC: 3023159928
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: e7d4b9173c45ea64a3cc42487ba61dea
TypeTreeHash:
serializedVersion: 2
Hash: b6d37feeab1eec1182d85292d55ae196
IncrementalBuildHash:
serializedVersion: 2
Hash: e7d4b9173c45ea64a3cc42487ba61dea
HashAppended: 0
ClassTypes:
- Class: 1
Script: {instanceID: 0}
- Class: 21
Script: {instanceID: 0}
- Class: 28
Script: {instanceID: 0}
- Class: 48
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: e982ad7d1eca06640864d29509a997f8, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 15f5bd88ea349c4488f6e34e51cecd59, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 271b50f7241504b49a6a7493d13721e7, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 6153f65e187d768439e5be590953dfb1, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89f1d49b50a31514787b4e268b1c73bb, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 7b6c36ccd2295994fa13a1cc24de7db4, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 89cec4ea05849a04981cec13b33447ea, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: fa3a4570827eff04fb79b0bdd622e953, type: 3}
- Class: 114
Script: {fileID: 11500000, guid: 50d2a45eec2b4a34e9aa449adf569f10, type: 3}
- Class: 115
Script: {instanceID: 0}
- Class: 128
Script: {instanceID: 0}
- Class: 213
Script: {instanceID: 0}
- Class: 222
Script: {instanceID: 0}
- Class: 224
Script: {instanceID: 0}
- Class: 328
Script: {instanceID: 0}
SerializeReferenceClassIdentifiers:
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.ArgumentCache
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentCallGroup
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.Events.PersistentListenerMode
- AssemblyName: UnityEngine.CoreModule
ClassName: UnityEngine.RectOffset
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.EventSystems.EventTrigger/Entry
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.EventSystems.EventTrigger/TriggerEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.AnimationTriggers
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Button/ButtonClickedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ColorBlock
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.FontData
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.MaskableGraphic/CullStateChangedEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Navigation
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.ScrollRect/ScrollRectEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Scrollbar/ScrollEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.Slider/SliderEvent
- AssemblyName: UnityEngine.UI
ClassName: UnityEngine.UI.SpriteState
Assets:
- "Assets/Res/ui/safetylearningpage/\u666E\u901A\u80CC\u666F.png"
- Assets/Res/ui/safetylearningpage/Group 152.png
- "Assets/Res/ui/safetylearningpage/\u9519\u8BEFicon.png"
- "Assets/Res/ui/safetylearningpage/\u5168\u5C4F\u6846.png"
- "Assets/Res/ui/safetylearningpage/\u64AD\u653E.png"
- "Assets/Res/ui/safetylearningpage/\u9009\u4E2D.png"
- Assets/Res/ui/safetylearningpage/Ellipse 29.png
- "Assets/Res/ui/safetylearningpage/\u6B63\u786E\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u89E3\u6790.prefab"
- Assets/Res/ui/safetylearningpage/Rectangle 165.png
- "Assets/Res/ui/safetylearningpage/\u95EE\u9898.prefab"
- "Assets/Res/ui/safetylearningpage/\u5168\u5C4F\u56FE\u6807.png"
- Assets/Res/ui/safetylearningpage/Group 146.png
- "Assets/Res/ui/safetylearningpage/\u64AD\u653E\u5668\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u9898\u76EE.prefab"
- "Assets/Res/ui/safetylearningpage/\u9519\u8BEF\u80CC\u666F.png"
- "Assets/Res/ui/safetylearningpage/\u6B63\u786Eicon.png"
- Assets/Res/ui/safetylearningpage/Rectangle 119.png
- Assets/Res/ui/safetylearningpage/safetylearningPage.prefab
Dependencies:
- D:/unity_project/Kill/AssetBundles/Android/ui_common.ab

View File

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

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 5cbccd02009b43544b4051a1774b1b13
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

Some files were not shown because too many files have changed in this diff Show More