Browse Source

Merge remote-tracking branch 'remotes/origin/F/0719_ImmersalOptimize'

# Conflicts:
#	Assets/MRNavigatorPro.unity
#	Assets/Resources/Template/Prefab/Image.prefab
#	Assets/Resources/Template/Prefab/Video 1.prefab
#	Assets/Resources/Template/Prefab/Video 1.prefab.meta
#	Assets/Resources/Template/Prefab/Video.prefab
#	Assets/Resources/VuforiaConfiguration.asset
#	Assets/Scripts/LayoutTemplate/TemplateVideo.cs
#	Assets/Scripts/UI/GameManager.cs
#	Assets/Scripts/UI/LoginPanel.cs
胡佳骏 1 year ago
parent
commit
74a735d63b
100 changed files with 3811 additions and 1785 deletions
  1. 5 1
      .gitignore
  2. 1 1
      Assets/AVProPlayer.meta
  3. 1 1
      Assets/GHZSDK.meta
  4. 1 1
      Assets/Immersal.meta
  5. 1 1
      Assets/ImmersalSDK/Core/Scripts/AR/ARMap.cs
  6. 6 2
      Assets/ImmersalSDK/Core/Scripts/AR/ARSpace.cs
  7. 1 1
      Assets/LiveKitRTC.meta
  8. 8 0
      Assets/LoginXR.meta
  9. 653 318
      Assets/MRNavigatorPro.unity
  10. 8 0
      Assets/OOBEPackage.meta
  11. 142 5
      Assets/Prefab/BluePrefabs/BlueRoot.prefab
  12. 720 27
      Assets/Prefab/BluePrefabs/MoveScenePanel.prefab
  13. 251 0
      Assets/Prefab/BluePrefabs/Redjiantou.prefab
  14. 7 0
      Assets/Prefab/BluePrefabs/Redjiantou.prefab.meta
  15. 197 0
      Assets/Prefab/BluePrefabs/SpotName.prefab
  16. 7 0
      Assets/Prefab/BluePrefabs/SpotName.prefab.meta
  17. 82 0
      Assets/Prefab/Crystal/jiaoying/Materials/Redjiantou.mat
  18. 2 2
      Assets/Prefab/Crystal/jiaoying/Materials/Redjiantou.mat.meta
  19. 15 5
      Assets/Prefab/Material/VideoUI.mat
  20. BIN
      Assets/Resources/GONGYE3.jpg
  21. 135 0
      Assets/Resources/GONGYE3.jpg.meta
  22. BIN
      Assets/Resources/Navigator_PhoneIcon.png
  23. 135 0
      Assets/Resources/Navigator_PhoneIcon.png.meta
  24. 4 4
      Assets/Resources/Template/Prefab/Image.prefab
  25. 74 0
      Assets/Resources/Template/Prefab/Text.prefab
  26. 7 4
      Assets/Resources/Template/Prefab/Video 1.prefab
  27. 1 1
      Assets/Resources/Template/Prefab/Video 1.prefab.meta
  28. 22 8
      Assets/Resources/Template/Prefab/Video.prefab
  29. 12 12
      Assets/Resources/VuforiaConfiguration.asset
  30. 8 0
      Assets/SSL.meta
  31. BIN
      Assets/SSL/WSATestCertificate.pfx
  32. 8 0
      Assets/SSL/WSATestCertificate.pfx.meta
  33. 29 0
      Assets/Script/CheckIsUse.cs
  34. 1 1
      Assets/Script/CheckIsUse.cs.meta
  35. 42 0
      Assets/Script/GetZeroPos.cs
  36. 1 1
      Assets/Script/GetZeroPos.cs.meta
  37. 109 0
      Assets/Script/GongShi2.cs
  38. 1 1
      Assets/Script/GongShi2.cs.meta
  39. 37 0
      Assets/Script/ShowTipTime.cs
  40. 1 1
      Assets/Script/ShowTipTime.cs.meta
  41. 1065 0
      Assets/Scripts/Blue/0.FrameworkDesign/BlueVersion3.cs
  42. 11 0
      Assets/Scripts/Blue/0.FrameworkDesign/BlueVersion3.cs.meta
  43. 0 7
      Assets/Scripts/Blue/0.FrameworkDesign/Command/ICommand.cs
  44. 0 202
      Assets/Scripts/Blue/0.FrameworkDesign/Core/AbstractArchitecture.cs
  45. 0 133
      Assets/Scripts/Blue/0.FrameworkDesign/Core/ControllerAr.cs
  46. 0 29
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitecture.cs
  47. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModule.cs
  48. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModule.cs.meta
  49. 0 36
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModuleExtension.cs
  50. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModuleExtension.cs.meta
  51. 0 6
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IAuto.cs
  52. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IAuto.cs.meta
  53. 0 9
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IController.cs
  54. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IController.cs.meta
  55. 0 10
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IModel.cs
  56. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IModel.cs.meta
  57. 0 10
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IService.cs
  58. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IService.cs.meta
  59. 0 9
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IUtility.cs
  60. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/IUtility.cs.meta
  61. 0 54
      Assets/Scripts/Blue/0.FrameworkDesign/Core/ModuleInitiator.cs
  62. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Core/ModuleInitiator.cs.meta
  63. BIN
      Assets/Scripts/Blue/0.FrameworkDesign/Design.eddx
  64. 0 22
      Assets/Scripts/Blue/0.FrameworkDesign/Event/BindablePropertyUnSubscribe.cs
  65. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/BindablePropertyUnSubscribe.cs.meta
  66. 0 41
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ChainEventSubscription.cs
  67. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ChainEventSubscription.cs.meta
  68. 0 27
      Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultChainEventUnSubcribe.cs
  69. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultChainEventUnSubcribe.cs.meta
  70. 0 160
      Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultTypeEventSystem.cs
  71. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultTypeEventSystem.cs.meta
  72. 0 49
      Assets/Scripts/Blue/0.FrameworkDesign/Event/EventToActionAdapter.cs
  73. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/EventToActionAdapter.cs.meta
  74. 0 8
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEvent.cs
  75. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEvent.cs.meta
  76. 0 18
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventSubscription.cs
  77. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventSubscription.cs.meta
  78. 0 31
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubcribeExtension.cs
  79. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubcribeExtension.cs.meta
  80. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubscribe.cs
  81. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubscribe.cs.meta
  82. 0 6
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IEvent.cs
  83. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IEvent.cs.meta
  84. 0 13
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ISubscription.cs
  85. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ISubscription.cs.meta
  86. 0 28
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ITypeEventSystem.cs
  87. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/ITypeEventSystem.cs.meta
  88. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribe.cs
  89. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribe.cs.meta
  90. 0 26
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribeExtension.cs
  91. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribeExtension.cs.meta
  92. 0 49
      Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSubscription.cs
  93. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSubscription.cs.meta
  94. 0 19
      Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSystemUnSubscribe.cs
  95. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSystemUnSubscribe.cs.meta
  96. 0 22
      Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeChainEventOnDestroyTrigger.cs
  97. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeChainEventOnDestroyTrigger.cs.meta
  98. 0 22
      Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDestroyTrigger.cs
  99. 0 11
      Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDestroyTrigger.cs.meta
  100. 0 22
      Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDisableTrigger.cs

+ 5 - 1
.gitignore

@@ -36,4 +36,8 @@
 /.vs
 /.vscode
 /Assets/Samples/*
-/Assets/NRSDK
+/Assets/TriLibXR/*
+/Assets/GHZSDK/*
+/Assets/AVProPlayer/*
+/Assets/Immersal/*
+/Assets/NRSDK

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Command.meta → Assets/AVProPlayer.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: ddfab4732bc4200488644a06987a4e3d
+guid: 7995b5a7e8b9a3e46a93bf9f9b3669ee
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Hand.meta → Assets/GHZSDK.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: f97b2a2e9d3b4724e9a700e43f803b0e
+guid: 61f82d14356979e49b907c7141aff38f
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Event.meta → Assets/Immersal.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 182ecb4e6148c144eb1311060ec35775
+guid: c9ae898be76006940b8b61049a84f882
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 1 - 1
Assets/ImmersalSDK/Core/Scripts/AR/ARMap.cs

@@ -331,7 +331,7 @@ namespace Immersal.AR
             ParseMapIdAndName();
             InitializeMesh();
 
-            this.SubscribeEvent<LoadMapFileEvent>(async e=>
+            this.RegisterEvent<LoadMapFileEvent>(async e=>
             {
                 //FileStream stream = new FileStream(Application.persistentDataPath + "/Map Data/81060-0515GHz.bytes", FileMode.Open);
                 //StreamReader reader = new StreamReader(stream);

+ 6 - 2
Assets/ImmersalSDK/Core/Scripts/AR/ARSpace.cs

@@ -240,10 +240,14 @@ namespace Immersal.AR
                     mapIdToMap.Remove(mapId);
 			}
 		}
-
+        public static bool isFind;
 		public static void UpdateSpace(SpaceContainer space, Vector3 pos, Quaternion rot)
         {
-	        if (space == null)
+            if(pos!=Vector3.zero)
+            {
+                isFind = true;
+            }
+            if (space == null)
 		        return;
 	        
             if (spaceToTransform.ContainsKey(space))

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Core.meta → Assets/LiveKitRTC.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: c1e93bff4fd1fe346906a5880e4bdf96
+guid: d0cab6f1e31be474b9f68a9fff011020
 folderAsset: yes
 DefaultImporter:
   externalObjects: {}

+ 8 - 0
Assets/LoginXR.meta

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

File diff suppressed because it is too large
+ 653 - 318
Assets/MRNavigatorPro.unity


+ 8 - 0
Assets/OOBEPackage.meta

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

+ 142 - 5
Assets/Prefab/BluePrefabs/BlueRoot.prefab

@@ -121,8 +121,9 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 17ee6c5630c36954aa04b75d7a903889, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  moveGame: {fileID: 0}
-  parent: {fileID: 0}
+  ControllerTracker: {fileID: 0}
+  RotToggle: {fileID: 0}
+  txtTip: {fileID: 0}
 --- !u!1 &811614693913846086
 GameObject:
   m_ObjectHideFlags: 0
@@ -166,6 +167,7 @@ GameObject:
   m_Component:
   - component: {fileID: 1263283691747613010}
   - component: {fileID: 1850852233735434126}
+  - component: {fileID: 7931960824797962037}
   m_Layer: 0
   m_Name: GetScenePosRot
   m_TagString: Untagged
@@ -184,7 +186,9 @@ Transform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
-  m_Children: []
+  m_Children:
+  - {fileID: 6221595730883228193}
+  - {fileID: 1929996345810943437}
   m_Father: {fileID: 5886227751517987777}
   m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -200,8 +204,50 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 3e5a86f83b8582144a4929f62a385b91, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  meshTest: {fileID: 0}
-  meshTestParent: {fileID: 0}
+--- !u!114 &7931960824797962037
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3255320335503680843}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e0f98af669c5b684ba4aa93942b26994, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  goRefrence: {fileID: 0}
+--- !u!1 &3827978887888892621
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1929996345810943437}
+  m_Layer: 0
+  m_Name: "\u52A0\u8F7D\u53C2\u7167\u7269"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!4 &1929996345810943437
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3827978887888892621}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1263283691747613010}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &4965398655029255260
 GameObject:
   m_ObjectHideFlags: 0
@@ -214,6 +260,7 @@ GameObject:
   - component: {fileID: 6577798671095520273}
   - component: {fileID: 1758718918244431555}
   - component: {fileID: 3641700550515877180}
+  - component: {fileID: 8552741019214790318}
   m_Layer: 0
   m_Name: BlueRoot
   m_TagString: Untagged
@@ -239,6 +286,7 @@ Transform:
   - {fileID: 3490034733957922214}
   - {fileID: 8294022177412783077}
   - {fileID: 3420359310440475008}
+  - {fileID: 381987406448428764}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -279,6 +327,51 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 7edfff1461ac83640bd4012b59d97201, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!114 &8552741019214790318
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4965398655029255260}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 757e290c9613bc04d82fb42d0291b70c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mesh_test: {fileID: 0}
+  ARSpaceForAll: {fileID: 0}
+--- !u!1 &5121041051266488258
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6221595730883228193}
+  m_Layer: 0
+  m_Name: "\u573A\u666F\u5750\u6807\u65CB\u8F6C"
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!4 &6221595730883228193
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 5121041051266488258}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1263283691747613010}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &7037846102355914218
 GameObject:
   m_ObjectHideFlags: 0
@@ -324,6 +417,50 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   MinMapCanvas: {fileID: 0}
+--- !u!1 &7307777014064094198
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 381987406448428764}
+  - component: {fileID: 7297556321924348335}
+  m_Layer: 0
+  m_Name: MQTT
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!4 &381987406448428764
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7307777014064094198}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 5886227751517987777}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &7297556321924348335
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7307777014064094198}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 8bbfd53e6654ed64d87de36e6e591752, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &7412898482642897146
 GameObject:
   m_ObjectHideFlags: 0

+ 720 - 27
Assets/Prefab/BluePrefabs/MoveScenePanel.prefab

@@ -1,5 +1,244 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &65128196799999334
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 3649189848106243299}
+  - component: {fileID: 2127074581468788420}
+  - component: {fileID: 8192354320504157824}
+  m_Layer: 5
+  m_Name: Checkmark
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &3649189848106243299
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 65128196799999334}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 7365569394283911935}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &2127074581468788420
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 65128196799999334}
+  m_CullTransparentMesh: 1
+--- !u!114 &8192354320504157824
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 65128196799999334}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &495147505644288932
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6943482148453705514}
+  - component: {fileID: 3172799301612246553}
+  - component: {fileID: 1533622294926151918}
+  m_Layer: 5
+  m_Name: Checkmark
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &6943482148453705514
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 495147505644288932}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2455972578339006403}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &3172799301612246553
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 495147505644288932}
+  m_CullTransparentMesh: 1
+--- !u!114 &1533622294926151918
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 495147505644288932}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &727913590191928296
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1025981743928194678}
+  - component: {fileID: 769204720778952656}
+  m_Layer: 5
+  m_Name: Toggle_Rot
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1025981743928194678
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 727913590191928296}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 3, y: 3, z: 3}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 7365569394283911935}
+  - {fileID: 8275570341696618188}
+  m_Father: {fileID: 5346544140485460166}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 280, y: 0}
+  m_SizeDelta: {x: 160, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &769204720778952656
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 727913590191928296}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 7855554482307426707}
+  toggleTransition: 1
+  graphic: {fileID: 8192354320504157824}
+  m_Group: {fileID: 631857244589115446}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_IsOn: 0
 --- !u!1 &926056208860273435
 GameObject:
   m_ObjectHideFlags: 0
@@ -8,58 +247,511 @@ GameObject:
   m_PrefabAsset: {fileID: 0}
   serializedVersion: 6
   m_Component:
-  - component: {fileID: 4475867107447169696}
-  - component: {fileID: 6170225109369971495}
-  - component: {fileID: 7003804316802991887}
+  - component: {fileID: 4475867107447169696}
+  - component: {fileID: 6170225109369971495}
+  - component: {fileID: 7003804316802991887}
+  m_Layer: 5
+  m_Name: Tatle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &4475867107447169696
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 926056208860273435}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0.0000015378746}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 9059506357934594476}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -25.980804}
+  m_SizeDelta: {x: 0, y: 54.1}
+  m_Pivot: {x: 0, y: 1}
+--- !u!222 &6170225109369971495
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 926056208860273435}
+  m_CullTransparentMesh: 1
+--- !u!114 &7003804316802991887
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 926056208860273435}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 30
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 3
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u573A\u666F\u4FEE\u6539"
+--- !u!1 &2425856537980874791
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 5346544140485460166}
+  - component: {fileID: 631857244589115446}
+  m_Layer: 5
+  m_Name: Toggle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &5346544140485460166
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2425856537980874791}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2288035785846727884}
+  - {fileID: 1025981743928194678}
+  m_Father: {fileID: 9059506357934594476}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 21}
+  m_SizeDelta: {x: 100, y: 100}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &631857244589115446
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2425856537980874791}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_AllowSwitchOff: 0
+--- !u!1 &3475190248443208912
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2288035785846727884}
+  - component: {fileID: 6505162007790614685}
+  m_Layer: 5
+  m_Name: Toggle_Pos
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2288035785846727884
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3475190248443208912}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 3, y: 3, z: 3}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2455972578339006403}
+  - {fileID: 86667034943025629}
+  m_Father: {fileID: 5346544140485460166}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 42, y: 0}
+  m_SizeDelta: {x: 160, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &6505162007790614685
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 3475190248443208912}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 6447199335648389232}
+  toggleTransition: 1
+  graphic: {fileID: 1533622294926151918}
+  m_Group: {fileID: 631857244589115446}
+  onValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_IsOn: 1
+--- !u!1 &4715126341692187410
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8275570341696618188}
+  - component: {fileID: 8661333463694409218}
+  - component: {fileID: 8575353719607878964}
   m_Layer: 5
-  m_Name: Tatle
+  m_Name: Label
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!224 &4475867107447169696
+--- !u!224 &8275570341696618188
 RectTransform:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 926056208860273435}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0.0000015378746}
+  m_GameObject: {fileID: 4715126341692187410}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
-  m_Father: {fileID: 9059506357934594476}
+  m_Father: {fileID: 1025981743928194678}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 9, y: -0.5}
+  m_SizeDelta: {x: -28, y: -3}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8661333463694409218
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4715126341692187410}
+  m_CullTransparentMesh: 1
+--- !u!114 &8575353719607878964
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4715126341692187410}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 14
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 10
+    m_MaxSize: 40
+    m_Alignment: 0
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: "\u65CB\u8F6C"
+--- !u!1 &4755814651083436146
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2455972578339006403}
+  - component: {fileID: 8600921577125891235}
+  - component: {fileID: 6447199335648389232}
+  m_Layer: 5
+  m_Name: Background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2455972578339006403
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4755814651083436146}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6943482148453705514}
+  m_Father: {fileID: 2288035785846727884}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 10, y: -10}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &8600921577125891235
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4755814651083436146}
+  m_CullTransparentMesh: 1
+--- !u!114 &6447199335648389232
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4755814651083436146}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &6586952314243465382
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 7365569394283911935}
+  - component: {fileID: 7297883957821561013}
+  - component: {fileID: 7855554482307426707}
+  m_Layer: 5
+  m_Name: Background
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &7365569394283911935
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6586952314243465382}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 3649189848106243299}
+  m_Father: {fileID: 1025981743928194678}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 10, y: -10}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7297883957821561013
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6586952314243465382}
+  m_CullTransparentMesh: 1
+--- !u!114 &7855554482307426707
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6586952314243465382}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!1 &6968208178492267066
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 86667034943025629}
+  - component: {fileID: 5157855302981497296}
+  - component: {fileID: 1119134096787960764}
+  m_Layer: 5
+  m_Name: Label
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &86667034943025629
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6968208178492267066}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2288035785846727884}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -25.980804}
-  m_SizeDelta: {x: 0, y: 54.1}
-  m_Pivot: {x: 0, y: 1}
---- !u!222 &6170225109369971495
+  m_AnchoredPosition: {x: 9, y: -0.5}
+  m_SizeDelta: {x: -28, y: -3}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &5157855302981497296
 CanvasRenderer:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 926056208860273435}
+  m_GameObject: {fileID: 6968208178492267066}
   m_CullTransparentMesh: 1
---- !u!114 &7003804316802991887
+--- !u!114 &1119134096787960764
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 926056208860273435}
+  m_GameObject: {fileID: 6968208178492267066}
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
@@ -68,18 +760,18 @@ MonoBehaviour:
       m_Calls: []
   m_FontData:
     m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
-    m_FontSize: 30
+    m_FontSize: 14
     m_FontStyle: 0
     m_BestFit: 0
-    m_MinSize: 3
+    m_MinSize: 10
     m_MaxSize: 40
-    m_Alignment: 4
+    m_Alignment: 0
     m_AlignByGeometry: 0
     m_RichText: 1
     m_HorizontalOverflow: 0
     m_VerticalOverflow: 0
     m_LineSpacing: 1
-  m_Text: "\u573A\u666F\u4FEE\u6539"
+  m_Text: "\u79FB\u52A8"
 --- !u!1 &9059506357934594475
 GameObject:
   m_ObjectHideFlags: 0
@@ -113,13 +805,14 @@ RectTransform:
   - {fileID: 4475867107447169696}
   - {fileID: 9059506358877159105}
   - {fileID: 9059506358599153448}
+  - {fileID: 5346544140485460166}
   m_Father: {fileID: 9059506359216945883}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 0, y: 0}
-  m_AnchoredPosition: {x: -288, y: -518}
-  m_SizeDelta: {x: 600, y: 200}
+  m_AnchoredPosition: {x: -288, y: -588.1}
+  m_SizeDelta: {x: 600, y: 270.1}
   m_Pivot: {x: 0, y: 0}
 --- !u!222 &9059506357934594478
 CanvasRenderer:
@@ -266,7 +959,7 @@ RectTransform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 9059506358599153447}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0.0000015378746}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
@@ -276,7 +969,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: -113, y: -25.980797}
+  m_AnchoredPosition: {x: -113, y: -59}
   m_SizeDelta: {x: 188, y: 60}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &9059506358599153451
@@ -398,7 +1091,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 125, y: -131}
+  m_AnchoredPosition: {x: 125, y: -192}
   m_SizeDelta: {x: -412, y: 60}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &9059506358877159108
@@ -583,7 +1276,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &9059506359216945883
 RectTransform:
   m_ObjectHideFlags: 0

+ 251 - 0
Assets/Prefab/BluePrefabs/Redjiantou.prefab

@@ -0,0 +1,251 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2050168319877545380
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2474115324049778628}
+  m_Layer: 0
+  m_Name: Line
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2474115324049778628
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2050168319877545380}
+  m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 8593095470401117936}
+  m_Father: {fileID: 6415550772002403172}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2900346646511244304
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 8593095470401117936}
+  - component: {fileID: 8241872130638718337}
+  - component: {fileID: 7470969541409100908}
+  m_Layer: 0
+  m_Name: line0
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &8593095470401117936
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2900346646511244304}
+  m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
+  m_LocalPosition: {x: 0, y: 0, z: 0.2310618}
+  m_LocalScale: {x: 0.00472598, y: 0.035547964, z: 0.0047259806}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 2474115324049778628}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &8241872130638718337
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2900346646511244304}
+  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &7470969541409100908
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2900346646511244304}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: ba1fcc647ca593b419b557c139d6d2aa, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 1
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}
+--- !u!1 &6415550772002403175
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6415550772002403172}
+  - component: {fileID: 8697380686219966545}
+  m_Layer: 0
+  m_Name: Redjiantou
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6415550772002403172
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6415550772002403175}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6415550772027453751}
+  - {fileID: 2474115324049778628}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &8697380686219966545
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6415550772002403175}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f870e180e31e2854cb0c8b3ebc320e54, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  y: 0
+  Line: {fileID: 2900346646511244304}
+  LineParent: {fileID: 2474115324049778628}
+  count: 0
+--- !u!1 &6415550772027453750
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6415550772027453751}
+  - component: {fileID: 6415550772027453749}
+  - component: {fileID: 6415550772027453748}
+  m_Layer: 0
+  m_Name: jiantou_12
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &6415550772027453751
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6415550772027453750}
+  m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.0236299, y: 0.023629896, z: 0.03554796}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 6415550772002403172}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!33 &6415550772027453749
+MeshFilter:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6415550772027453750}
+  m_Mesh: {fileID: 4300000, guid: 5c6571ac1ad1b38439763665017389c6, type: 3}
+--- !u!23 &6415550772027453748
+MeshRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6415550772027453750}
+  m_Enabled: 1
+  m_CastShadows: 1
+  m_ReceiveShadows: 1
+  m_DynamicOccludee: 1
+  m_StaticShadowCaster: 0
+  m_MotionVectors: 1
+  m_LightProbeUsage: 1
+  m_ReflectionProbeUsage: 1
+  m_RayTracingMode: 2
+  m_RayTraceProcedural: 0
+  m_RenderingLayerMask: 1
+  m_RendererPriority: 0
+  m_Materials:
+  - {fileID: 2100000, guid: ba1fcc647ca593b419b557c139d6d2aa, type: 2}
+  - {fileID: 2100000, guid: f1a5960c0fca30e42b02ab8482afa220, type: 2}
+  m_StaticBatchInfo:
+    firstSubMesh: 0
+    subMeshCount: 0
+  m_StaticBatchRoot: {fileID: 0}
+  m_ProbeAnchor: {fileID: 0}
+  m_LightProbeVolumeOverride: {fileID: 0}
+  m_ScaleInLightmap: 1
+  m_ReceiveGI: 1
+  m_PreserveUVs: 0
+  m_IgnoreNormalsForChartDetection: 0
+  m_ImportantGI: 0
+  m_StitchLightmapSeams: 0
+  m_SelectedEditorRenderState: 3
+  m_MinimumChartSize: 4
+  m_AutoUVMaxDistance: 0.5
+  m_AutoUVMaxAngle: 89
+  m_LightmapParameters: {fileID: 0}
+  m_SortingLayerID: 0
+  m_SortingLayer: 0
+  m_SortingOrder: 0
+  m_AdditionalVertexStreams: {fileID: 0}

+ 7 - 0
Assets/Prefab/BluePrefabs/Redjiantou.prefab.meta

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

+ 197 - 0
Assets/Prefab/BluePrefabs/SpotName.prefab

@@ -0,0 +1,197 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &7248445321377733376
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 6160732997819309680}
+  - component: {fileID: 1943017103362978887}
+  - component: {fileID: 7040807331170977070}
+  m_Layer: 5
+  m_Name: Text (Legacy)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!224 &6160732997819309680
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7248445321377733376}
+  m_LocalRotation: {x: 0, y: 1, z: 0, w: 0}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0.001, y: 0.001, z: 0.001}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 1691702385780244935}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: 0.17863, y: 0}
+  m_SizeDelta: {x: 171.76273, y: 0.10000001}
+  m_Pivot: {x: 0, y: 0}
+--- !u!222 &1943017103362978887
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7248445321377733376}
+  m_CullTransparentMesh: 1
+--- !u!114 &7040807331170977070
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7248445321377733376}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 19
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 3
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 1
+    m_LineSpacing: 1
+  m_Text: "\u53CC\u6392\u6247\u5F626_5_\u4E0A\u4E0B"
+--- !u!1 &8948373300025855900
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 1691702385780244935}
+  - component: {fileID: 6820472137488238178}
+  - component: {fileID: 955059637792536376}
+  - component: {fileID: 6256954842875362153}
+  - component: {fileID: 7169546809514429171}
+  m_Layer: 5
+  m_Name: SpotName
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &1691702385780244935
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8948373300025855900}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: -0}
+  m_LocalScale: {x: 2, y: 2, z: 2}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 6160732997819309680}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 1.1}
+  m_SizeDelta: {x: 0.17863, y: 0.1}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!223 &6820472137488238178
+Canvas:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8948373300025855900}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 2
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 0
+  m_SortingLayerID: 0
+  m_SortingOrder: 0
+  m_TargetDisplay: 0
+--- !u!114 &955059637792536376
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8948373300025855900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 0
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 0
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
+--- !u!114 &6256954842875362153
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8948373300025855900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &7169546809514429171
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8948373300025855900}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: e238eb897171cfa4da9f18363f46e85b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  spoitText: {fileID: 7040807331170977070}

+ 7 - 0
Assets/Prefab/BluePrefabs/SpotName.prefab.meta

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

+ 82 - 0
Assets/Prefab/Crystal/jiaoying/Materials/Redjiantou.mat

@@ -0,0 +1,82 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+  serializedVersion: 8
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_Name: Redjiantou
+  m_Shader: {fileID: 203, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
+  m_LightmapFlags: 4
+  m_EnableInstancingVariants: 0
+  m_DoubleSidedGI: 0
+  m_CustomRenderQueue: -1
+  stringTagMap: {}
+  disabledShaderPasses: []
+  m_SavedProperties:
+    serializedVersion: 3
+    m_TexEnvs:
+    - _BumpMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailAlbedoMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailMask:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _DetailNormalMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _EmissionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MainTex:
+        m_Texture: {fileID: 2800000, guid: ba4496ae45b670c42965e750ae61ef21, type: 3}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _MetallicGlossMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _OcclusionMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    - _ParallaxMap:
+        m_Texture: {fileID: 0}
+        m_Scale: {x: 1, y: 1}
+        m_Offset: {x: 0, y: 0}
+    m_Ints: []
+    m_Floats:
+    - _BumpScale: 1
+    - _Cutoff: 0.5
+    - _DetailNormalMapScale: 1
+    - _DstBlend: 0
+    - _GlossMapScale: 1
+    - _Glossiness: 0.5
+    - _GlossyReflections: 1
+    - _InvFade: 0.89
+    - _Metallic: 0
+    - _Mode: 0
+    - _OcclusionStrength: 1
+    - _Parallax: 0.02
+    - _SmoothnessTextureChannel: 0
+    - _SpecularHighlights: 1
+    - _SrcBlend: 1
+    - _UVSec: 0
+    - _ZWrite: 1
+    m_Colors:
+    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
+    - _TintColor: {r: 0.9622642, g: 0.031772893, b: 0.117357686, a: 1}
+  m_BuildTextureStacks: []

+ 2 - 2
Assets/UniversalRenderPipelineAsset.asset.meta → Assets/Prefab/Crystal/jiaoying/Materials/Redjiantou.mat.meta

@@ -1,8 +1,8 @@
 fileFormatVersion: 2
-guid: 00dfba18d195a4b79abe0254cdd0870e
+guid: ba1fcc647ca593b419b557c139d6d2aa
 NativeFormatImporter:
   externalObjects: {}
-  mainObjectFileID: 0
+  mainObjectFileID: 2100000
   userData: 
   assetBundleName: 
   assetBundleVariant: 

+ 15 - 5
Assets/Prefab/Material/VideoUI.mat

@@ -2,18 +2,19 @@
 %TAG !u! tag:unity3d.com,2011:
 --- !u!21 &2100000
 Material:
-  serializedVersion: 6
+  serializedVersion: 8
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_Name: VideoUI
-  m_Shader: {fileID: 4800000, guid: fc66c90331fe8244d8a9850cdc745224, type: 3}
-  m_ShaderKeywords: 
+  m_Shader: {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
+  m_ValidKeywords: []
+  m_InvalidKeywords: []
   m_LightmapFlags: 4
   m_EnableInstancingVariants: 0
   m_DoubleSidedGI: 0
-  m_CustomRenderQueue: 1000
+  m_CustomRenderQueue: -1
   stringTagMap: {}
   disabledShaderPasses: []
   m_SavedProperties:
@@ -55,8 +56,10 @@ Material:
         m_Texture: {fileID: 0}
         m_Scale: {x: 1, y: 1}
         m_Offset: {x: 0, y: 0}
+    m_Ints: []
     m_Floats:
     - _BumpScale: 1
+    - _ColorMask: 15
     - _Cutoff: 0.5
     - _DetailNormalMapScale: 1
     - _Distort: 0
@@ -76,9 +79,16 @@ Material:
     - _SmoothnessTextureChannel: 0
     - _SpecularHighlights: 1
     - _SrcBlend: 1
+    - _Stencil: 0
+    - _StencilComp: 8
+    - _StencilOp: 0
+    - _StencilReadMask: 255
+    - _StencilWriteMask: 255
     - _UVSec: 0
+    - _UseUIAlphaClip: 0
     - _ZWrite: 1
     m_Colors:
-    - _Color: {r: 1, g: 1, b: 1, a: 1}
+    - _Color: {r: 1, g: 1, b: 1, a: 0}
     - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
     - _MainColor: {r: 0.122641504, g: 0.122641504, b: 0.122641504, a: 1}
+  m_BuildTextureStacks: []

BIN
Assets/Resources/GONGYE3.jpg


+ 135 - 0
Assets/Resources/GONGYE3.jpg.meta

@@ -0,0 +1,135 @@
+fileFormatVersion: 2
+guid: b86ed4df3284fa945bac5ca676674152
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 12
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMasterTextureLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 0
+    wrapV: 0
+    wrapW: 0
+  nPOTScale: 0
+  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: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Server
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Resources/Navigator_PhoneIcon.png


+ 135 - 0
Assets/Resources/Navigator_PhoneIcon.png.meta

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

+ 4 - 4
Assets/Resources/Template/Prefab/Image.prefab

@@ -64,8 +64,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   activation: 0
-  flattenAxis: 0
-  activeHandle: -2
+  flattenAxis: 3
+  activeHandle: 6
   m_HandlerAssets: {fileID: 0}
   activeScaleMinRestrict: 1
   scaleMinimum: 0.05
@@ -237,7 +237,7 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
-  m_PresetInfoIsWorld: 1
+  m_PresetInfoIsWorld: 0
 --- !u!114 &5709561373420343268
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -431,7 +431,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &6646167738625722553
 Transform:
   m_ObjectHideFlags: 0

+ 74 - 0
Assets/Resources/Template/Prefab/Text.prefab

@@ -28,6 +28,7 @@ RectTransform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 2828833022409846366}
   m_RootOrder: 0
@@ -60,6 +61,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -103,6 +105,7 @@ RectTransform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 2828833022409846366}
   m_RootOrder: 1
@@ -135,6 +138,7 @@ MonoBehaviour:
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
   m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
   m_OnCullStateChanged:
     m_PersistentCalls:
@@ -196,6 +200,7 @@ RectTransform:
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 0.001, y: 0.001, z: 0.001}
+  m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 2828833021118674286}
   - {fileID: 2828833021312147513}
@@ -250,6 +255,7 @@ MonoBehaviour:
   m_FallbackScreenDPI: 96
   m_DefaultSpriteDPI: 96
   m_DynamicPixelsPerUnit: 1
+  m_PresetInfoIsWorld: 0
 --- !u!114 &2828833022409846361
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -279,6 +285,8 @@ GameObject:
   - component: {fileID: 4020363977020836969}
   - component: {fileID: 6564544425676368077}
   - component: {fileID: 183926529109974472}
+  - component: {fileID: 3735631276721690460}
+  - component: {fileID: 8298780282426106108}
   m_Layer: 0
   m_Name: Text
   m_TagString: Untagged
@@ -296,6 +304,7 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 2828833022409846366}
   m_Father: {fileID: 0}
@@ -367,3 +376,68 @@ MonoBehaviour:
   canTwoHandScale: 0
   minScaleRatio: 0.5
   maxScaleRatio: 3
+--- !u!114 &3735631276721690460
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2828833022510646943}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 761d3c9fbe9f13f47818f9c59cd6aa03, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  activation: 0
+  flattenAxis: 3
+  activeHandle: 6
+  m_HandlerAssets: {fileID: 0}
+  activeScaleMinRestrict: 1
+  scaleMinimum: 0.05
+  activeScaleMaxRestrict: 0
+  scaleMaximum: 2
+  scaleHandleSize: 0.016
+  BoundBoxCollider: {fileID: 0}
+  rotationHandleSize: 0.016
+  showRotationHandleForX: 1
+  showRotationHandleForY: 1
+  showRotationHandleForZ: 1
+  axisScaleHandleSize: 0.016
+  activeAxis: -2
+  RotateStartAudio: 4
+  RotateStopAudio: 3
+  ScaleStartAudio: 4
+  ScaleStopAudio: 3
+  RotateStarted:
+    m_PersistentCalls:
+      m_Calls: []
+  RotateStopped:
+    m_PersistentCalls:
+      m_Calls: []
+  ScaleStarted:
+    m_PersistentCalls:
+      m_Calls: []
+  ScaleStopped:
+    m_PersistentCalls:
+      m_Calls: []
+  Rotating:
+    m_PersistentCalls:
+      m_Calls: []
+  Scaling:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &8298780282426106108
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2828833022510646943}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f2c924915f6be274b8af2986784ee2c1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  boundingBox: {fileID: 3735631276721690460}
+  manipulationHandler: {fileID: 183926529109974472}
+  obj_BoundingBox: {fileID: 0}

+ 7 - 4
Assets/Resources/Template/Prefab/Video 1.prefab

@@ -117,7 +117,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 20, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -535,7 +535,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &1856638061154403308
 RectTransform:
   m_ObjectHideFlags: 0
@@ -829,7 +829,7 @@ RectTransform:
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
-  m_AnchorMax: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 10, y: 0}
   m_Pivot: {x: 0.5, y: 0.5}
@@ -1157,10 +1157,13 @@ MonoBehaviour:
   scaleMinimum: 0.05
   activeScaleMaxRestrict: 0
   scaleMaximum: 2
+  scaleHandleSize: 0.016
   BoundBoxCollider: {fileID: 0}
+  rotationHandleSize: 0.016
   showRotationHandleForX: 1
   showRotationHandleForY: 1
   showRotationHandleForZ: 1
+  axisScaleHandleSize: 0.016
   activeAxis: -2
   RotateStartAudio: 4
   RotateStopAudio: 3
@@ -1901,7 +1904,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!4 &8554676593696482102
 Transform:
   m_ObjectHideFlags: 0

+ 1 - 1
Assets/Resources/Template/Prefab/Video 1.prefab.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: aa8069ef5bc27b142a15f119993c3075
+guid: 14407af8ca878cf458dbe9faa01d856a
 PrefabImporter:
   externalObjects: {}
   userData: 

+ 22 - 8
Assets/Resources/Template/Prefab/Video.prefab

@@ -980,7 +980,7 @@ RectTransform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1856638061838950079}
   m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: -0.001}
+  m_LocalPosition: {x: 0, y: 0, z: -0.005}
   m_LocalScale: {x: 0.2630543, y: 0.45, z: 2.6}
   m_ConstrainProportionsScale: 0
   m_Children:
@@ -1100,6 +1100,7 @@ GameObject:
   - component: {fileID: 8320199229358921942}
   - component: {fileID: 5579340848617264414}
   - component: {fileID: 4277880848986068514}
+  - component: {fileID: 175833524124856625}
   m_Layer: 0
   m_Name: Video
   m_TagString: Untagged
@@ -1151,8 +1152,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   activation: 0
-  flattenAxis: 0
-  activeHandle: -2
+  flattenAxis: 3
+  activeHandle: 6
   m_HandlerAssets: {fileID: 0}
   activeScaleMinRestrict: 1
   scaleMinimum: 0.05
@@ -1241,6 +1242,21 @@ MonoBehaviour:
   canTwoHandScale: 0
   minScaleRatio: 0.5
   maxScaleRatio: 3
+--- !u!114 &175833524124856625
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 6134645586828692388}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f2c924915f6be274b8af2986784ee2c1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  boundingBox: {fileID: 8320199229358921942}
+  manipulationHandler: {fileID: 4277880848986068514}
+  obj_BoundingBox: {fileID: 0}
 --- !u!1 &6405407511848220291
 GameObject:
   m_ObjectHideFlags: 0
@@ -1951,7 +1967,7 @@ MonoBehaviour:
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
   m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
+  m_RaycastTarget: 0
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1
   m_OnCullStateChanged:
@@ -2181,8 +2197,6 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: c7d817848393db44c8e1668eb60b40d8, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  Icon: {fileID: 7783334408191734234}
-  m_IsPlaying: 0
 --- !u!114 &1721331326262511666
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -2391,7 +2405,7 @@ RectTransform:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 8654540562372780374}
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0.0004}
+  m_LocalPosition: {x: 0, y: 0, z: 0.005}
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children: []
@@ -2424,7 +2438,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   m_Material: {fileID: 0}
-  m_Color: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 1}
+  m_Color: {r: 0.12156863, g: 0.12156863, b: 0.12156863, a: 0}
   m_RaycastTarget: 1
   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
   m_Maskable: 1

+ 12 - 12
Assets/Resources/VuforiaConfiguration.asset

@@ -9,12 +9,12 @@ MonoBehaviour:
   m_GameObject: {fileID: 0}
   m_Enabled: 1
   m_EditorHideFlags: 0
-  m_Script: {fileID: -2067402452, guid: bab6fa851cf5a1a4bba3cec5f191cb8e, type: 3}
+  m_Script: {fileID: 0}
   m_Name: VuforiaConfiguration
-  m_EditorClassIdentifier: 
+  m_EditorClassIdentifier: Vuforia.Unity.Engine:Vuforia:VuforiaConfiguration
   vuforia:
-    vuforiaLicenseKey: AVlELY3/////AAABmY7ahpcuXURzsDW+UpOnjFhMhE+YXUJ/92JxCgtJ9iO8EqWQU813lwWi9H8lCGBMJiXETblP9/pjqwiM+k4U3TOprWPqviSa6mNS2NTvP4k4xcujy3KuMFl/wZZgS7/o4uDmNQl1Y9u7iOQhrTyFw5A/qxvAHcokuFafTEAZ1LG8f5Qv4rMMSW5/Ya9E7b0sW8VSFegHeK3C1EokFB65w9kyfeTv/mitwfN861X3Z7trfHwCN4X4q5Y3hJ5hKPx/qfEqBLQqwNtfjRd5fL4/80d2gUKLp5EfsGwalmPBCrxESHQCxiKl7tEqBr2c/10Mtcg2hLJitbV7g2a97yP1SA8BK3xloa1hAMzoPFukqqzW
-    ufoLicenseKey: QWRBL0Z3bi8vLy8vQUFBQUtEQlpWcEFHaFVpOGhDQ1hrM1BmSXpWay9SbjdoMGs4RVNWc1RQTUpPdFFXekdWc1FNUVZlZkl2QURWa3N6MG9RdFdacXU2K2pjSDF6NjNVVnh1bUowdU1ZLzU5ZGxkdng1QStHKzVCL1c4dHFqdEJhQXl6OG14Ym1URDBUaSs4OWxkQU4yZndKeUdPVDdSSExHU2Z2TDRRTFBYV0VhSHprbEhlMWdmNGh5eTRFRDZ4YytYSmxwcXBQekVwanliUEN5WExoRldJVlI3TEhxQXp2NURqOEcyY3Q0L3pObVVGUUp5dFJISVF4cHRnRzFodENpb1ZySTNBeDF3bWR4S3hvT2xUMU5JNzBVckQydGd2c1lSR0cwbWVpVXl2eUNZTU1kdnRaeFRpNnpWa1J0WlJ1Ym5VUCttR0NaRXkxSW8wQUdyMzdVZEs0WkZOdHhSbzFSd1IrYXRodmw2SDU4VFM2QmtjMTRZcEFpTzk=
+    vuforiaLicenseKey: 
+    ufoLicenseKey: QWJKUmlWYi8vLy8vQUFBQUtGSHQya2E1bVVTaHRhUGxKS2dSM3RvSFRaQ0pwSjhSVG5CbEs1MnBTSTFWTzZaTEU5WU0rZ1M5aXRBWkxZTW1lZTAwekxxcjBJQTc4TjRaK0V1STFXWHJSK3BFcHFXSC9rZWVONTRvaTcyL2ZFenhtRE1oZHpyQnF3NXhaZVdVaHdNdkNVTUxFUFpNRUkveDRtaVk0aHQ5UXFtcTd1YUNhTllKKy9vTjVmMXV0SFNiN0I5Wjl3SXBLL21ERkQ2cityOVZkWUZIVi9GSkRJRXc3T3R3RXdpRjY5ZmFaU2dBOXo5RmcrbSthb0RBVEYvSHRMY2NjLysrcTg1WjhDS0JMT0NaV3dsQURvVjJCRnlsaURMd1Z0aWs4NGRySGNaT3FQUUJlWWlrQTVGNEkzMU81QTh2NHlWeHRWbm1mb0VkTDZuc1Jxd3k2am4yTG9kV2h1cW5zRUw3OFg3a0U3NGhZaXZWUS9mYWVuT08=
     delayedInitialization: 0
     cameraFocusModeSetting: 2
     cameraDeviceModeSetting: -1
@@ -23,30 +23,30 @@ MonoBehaviour:
     modelTargetRecoWhileExtendedTracked: 1
     shareRecordingsInITunes: 0
     logLevel: 0
-    version: 10.15.4
-    eulaAcceptedVersions: '{"Values":["","0.0","10.11","10.12","10.13","8.5","7.5","8.3","7.2","7.1","8.0","7.7","8.1","9.2","9.4","10.10","9.8","10.3","10.2","9.1","10.15","9.7"]}'
+    version: 1.0.0
+    eulaAcceptedVersions: '{"Values":["8.5","7.5","8.3","7.2","7.1","8.0","7.7","8.1","0.0","9.2","9.4","10.10","10.11","10.12","10.13","9.8","10.3","10.2","9.1","10.15","9.7"]}'
   database:
     disableModelExtraction: 0
   shaders:
-    depthMaskShader: {fileID: 4800000, guid: 1ce7eb78425fb1540838bc9d5d95857a, type: 3}
-    outlineShader: {fileID: 4800000, guid: c1ded68d068051d4f92650fcddaae5c7, type: 3}
+    depthMaskShader: {fileID: 4800000, guid: 9894afa5f3a5e4bbca625981beb1b20e, type: 3}
+    outlineShader: {fileID: 4800000, guid: 88d3b6b5cf364476ca39fcec255331b1, type: 3}
     unlitTransparentShader: {fileID: 10750, guid: 0000000000000000f000000000000000,
       type: 0}
   videoBackground:
     numDivisions: 2
-    videoBackgroundShader: {fileID: 4800000, guid: f40623b353e2f1943b1b3ba42975db7a,
+    videoBackgroundShader: {fileID: 4800000, guid: 144dfca22ac584ade9e538e24a5ddded,
       type: 3}
     unlitShader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0}
     videoBackgroundEnabled: 1
   deviceTracker:
-    autoStartTracker: 0
+    autoStartTracker: 1
     arcoreRequirement: 1
     autoImportArcore: 1
-    thirdPartyARCoreClientDetected: 1
+    thirdPartyARCoreClientDetected: 0
   playmode:
     mRecordingPath: 
     playModeType: 0
   webcam:
     renderTextureLayer: 30
   packageInformation:
-    ARFoundationVersion: 4.2.7
+    ARFoundationVersion: 

+ 8 - 0
Assets/SSL.meta

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

BIN
Assets/SSL/WSATestCertificate.pfx


+ 8 - 0
Assets/SSL/WSATestCertificate.pfx.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d5059816ebbbc3744a5d565fdcc9771a
+timeCreated: 1532356920
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 29 - 0
Assets/Script/CheckIsUse.cs

@@ -0,0 +1,29 @@
+using Immersal.AR;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class CheckIsUse : MonoBehaviour
+{
+    public Toggle t;
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    // Update is called once per frame
+    void Update()
+    {
+        if (ARSpace.isFind)
+        {
+            t.interactable = true;
+        }
+        else
+        {
+            t.interactable = false;
+
+        }
+    }
+}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Core/ControllerAr.cs.meta → Assets/Script/CheckIsUse.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 1ab12634675f7e9449ae7461b5e0b8f6
+guid: 9863930a937216a47aaebc6d15af1772
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 42 - 0
Assets/Script/GetZeroPos.cs

@@ -0,0 +1,42 @@
+using UnityEngine;
+using XRTool.Util;
+
+public class GetZeroPos : MonoBehaviour
+{
+    public Transform arMap;
+    void Start()
+    {
+        TimerMgr.Instance.CreateTimer(()=> {         // 获取MeshFilter组件
+            MeshFilter meshFilter = arMap.GetComponent<MeshFilter>();
+
+            if (meshFilter != null)
+            {
+                // 获取Mesh
+                Mesh mesh = meshFilter.mesh;
+
+                // 获取所有顶点
+                Vector3[] vertices = mesh.vertices;
+
+                // 初始化最小坐标值为第一个顶点的坐标
+                Vector3 minPoint = vertices[0];
+
+                // 找到最小的X、Y和Z坐标值
+                for (int i = 1; i < vertices.Length; i++)
+                {
+                    Vector3 vertex = vertices[i];
+                    minPoint.x = Mathf.Min(minPoint.x, vertex.x);
+                    minPoint.y = Mathf.Min(minPoint.y, vertex.y);
+                    minPoint.z = Mathf.Min(minPoint.z, vertex.z);
+                }
+
+                // 最小坐标值就是网格的零点
+                Debug.Log("Mesh的零点:" + minPoint);
+            }
+            else
+            {
+                Debug.LogError("未找到MeshFilter组件");
+            }
+        },1,-1);
+
+    }
+}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Core/AbstractArchitecture.cs.meta → Assets/Script/GetZeroPos.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: 32afae3298447024aa4cfeb2e4c7f555
+guid: a2ee836adfd28b44fb9f7a75b4139e96
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 109 - 0
Assets/Script/GongShi2.cs

@@ -0,0 +1,109 @@
+using System.Collections;
+using System.Collections.Generic;
+using Blue;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class GongShi2 : MonoBehaviour
+{
+    public static float ff = 0;
+    public static Vector3 vp3;
+
+    public static Vector3 ve3;
+    public static void F2Dto3D(float x2, float y2, float th,float tw, float x22, float y22,float sceneLength, float sceneWidth)
+    {
+        GameManager.Instance.StartCoroutine(startjisuan(x2,y2,th,tw,x22,y22, sceneLength, sceneWidth));
+
+
+
+    }
+    public static GameObject WebPosObj;
+    public static GameObject WebPosObj2;
+    static IEnumerator startjisuan(float x2, float y2, float th, float tw, float x22, float y22, float sceneLength, float sceneWidth)
+    {
+        Transform parent = (SceneIOCContainer.Instance.Pull("mesh_test") as GameObject).transform;
+
+        parent.transform.localPosition = Vector3.zero;
+        parent.transform.eulerAngles = Vector3.zero;
+
+        if (WebPosObj == null)
+            WebPosObj = new GameObject();
+
+        if (WebPosObj2 == null)
+            WebPosObj2 = new GameObject();
+
+        //  Transform meshTestParent =(SceneIOCContainer.Instance.Pull("ARSpaceForAll") as GameObject).transform;
+        //创建空锚点GameObject
+        GameObject go = WebPosObj;
+        go.transform.parent = parent.parent;
+        Vector2 p1 = new Vector2(x2 / tw * sceneLength, (th - (y2)) / th * sceneWidth);
+        Vector2 p2 = Vector2.zero - p1;
+        Vector3 newPosition = new Vector3(p2.x, 0, p2.y);
+        parent.localPosition = newPosition;
+        yield return new WaitForSeconds(0.1f);
+        go.transform.localPosition = Vector3.zero;
+        parent.parent = go.transform;
+        yield return new WaitForSeconds(0.1f);
+        //创建空锚点 朝向
+        p1 = new Vector2(x22 / tw * sceneLength, (th - (y22)) / th * sceneWidth);
+        p2 = Vector2.zero - p1;
+        newPosition = new Vector3(-p2.x, 0, -p2.y);
+        GameObject go2 = WebPosObj2;
+        GameObject go3 = new GameObject();
+        go2.transform.parent = parent;
+        go3.transform.parent = parent;
+        go3.transform.localPosition = newPosition;
+        go2.transform.localPosition = newPosition;
+        yield return new WaitForSeconds(0.1f);
+        go2.transform.parent = go.transform.parent;
+        yield return new WaitForSeconds(0.1f);
+      //  go.transform.parent = parent.parent;
+     //   yield return new WaitForSeconds(0.1f);
+        //把当前物体设置到锚点内
+      //  yield return new WaitForSeconds(0.1f);
+        go.transform.LookAt(go2.transform);
+        go.transform.localEulerAngles = new Vector3(0, 360-go.transform.localEulerAngles.y, 0);
+        yield return new WaitForSeconds(0.1f);
+        //设置回来
+        parent.parent = go.transform.parent;
+
+        yield return new WaitForSeconds(0.1f);
+        //  Destroy(go);
+        //  Destroy(go2);
+        Destroy(WebPosObj2);
+        WebPosObj2= go3;
+        WebPosObj.transform.parent = parent.parent;
+        WebPosObj2.transform.parent = parent.parent;
+        CommandSystem.Instance.Send(new InitSuccessCommand());
+    }
+
+
+    public static List<Vector2> GetWebPos(float th, float tw, float sceneLength, float sceneWidth)
+    {
+        Transform parent = (SceneIOCContainer.Instance.Pull("mesh_test") as GameObject).transform;
+        WebPosObj.transform.parent = parent;
+        WebPosObj2.transform.parent = parent;
+        List<Vector2> lvlist = new List<Vector2>();
+        Vector2 p1 = new Vector2(Mathf.Abs(WebPosObj.transform.localPosition.x / sceneLength * tw  ), Mathf.Abs(th-((WebPosObj.transform.localPosition.z) / sceneWidth * th  )));
+        lvlist.Add(p1);
+        Vector2 p2 = new Vector2(Mathf.Abs(WebPosObj2.transform.localPosition.x / sceneLength * tw ), Mathf.Abs(th-((WebPosObj2.transform.localPosition.z )/ sceneWidth * th  )));
+        lvlist.Add(p2);
+        Debug.Log("Web端Pos  :" + p1);
+        Debug.Log("Web端Pos 2 :" + p2);
+        WebPosObj.transform.parent = parent.parent;
+        WebPosObj2.transform.parent = parent.parent;
+        return lvlist;
+    }
+}
+
+public struct InitEvent:IEvent
+{
+
+}
+public struct InitSuccessCommand : ICommand
+{
+    public void OnExcute()
+    {
+        this.SendEvent<InitEvent>();
+    }
+}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Command/ICommand.cs.meta → Assets/Script/GongShi2.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: de3ff73d66e6dc44d85d583a30ca4137
+guid: 3ce90193f496eab4a99c6193ac0b16da
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 37 - 0
Assets/Script/ShowTipTime.cs

@@ -0,0 +1,37 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ShowTipTime : MonoBehaviour
+{
+    public float TimeFloat = 10;
+    // Start is called before the first frame update
+    void Start()
+    {
+        
+    }
+
+    private void OnEnable()
+    {
+
+        t = 0;
+    }
+
+    private void OnDisable()
+    {
+        t = 0;
+        TimeFloat = 10;
+    }
+    public float t;
+    // Update is called once per frame
+    void Update()
+    {
+        t = t + Time.deltaTime;
+        if(t>TimeFloat)
+        {
+            this.gameObject.SetActive(false);
+        }
+        this.transform.position = OpenXRCamera.Instance.head.position;
+        this.transform.eulerAngles = OpenXRCamera.Instance.head.eulerAngles;
+    }
+}

+ 1 - 1
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitecture.cs.meta → Assets/Script/ShowTipTime.cs.meta

@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: b31c733c3aa4cdd4b960743d9d431154
+guid: 0c53e998838ecee448a389d5533873fd
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2

+ 1065 - 0
Assets/Scripts/Blue/0.FrameworkDesign/BlueVersion3.cs

@@ -0,0 +1,1065 @@
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using System.Reflection;
+
+/*
+修改第三版
+将事件从IArchitecture中剥离
+*/
+namespace Blue
+{
+
+    #region  Architecture
+
+    /// <summary>
+    /// 所有功能在 IArchitecture 接口中定义
+    /// 1. 注册/获取Service、Model、Utility;
+    /// 2. 发送命令、事件、查询
+    /// 3. 注册、取消注册事件
+    /// </summary>
+    public interface IArchitecture
+    {
+        void SetArchitecture(IArchitecture instance);
+        void InitArchitecture();
+
+        void RegisterService<T>(T service) where T : IService;
+        void RegisterModel<T>(T Model) where T : IModel;
+        void RegisterUtility<T>(T utility) where T : IUtility;
+
+        T GetService<T>() where T : class, IService;
+        T GetModel<T>() where T : class, IModel;
+        T GetUtility<T>() where T : class, IUtility;
+    }
+
+    public abstract class AbstractArchitecture<T> : IArchitecture where T : AbstractArchitecture<T>, new()
+    {
+        private IOCContainer mContainer = new IOCContainer(); // 将类型、对象存储进IOC容器
+        private ICommandHandler commandHandler = new DefaultCommandHandler();
+        private IQueryHandler queryHandler = new DefaultQueryHandler();
+        private ITypeEventSystem mTypeEventSystem = new TypeEventSystem();
+        private HashSet<IService> mService;
+        private HashSet<IModel> mModels;
+
+        protected abstract void Init();
+
+        private static IArchitecture mArchitectureInstance;
+        void IArchitecture.SetArchitecture(IArchitecture instance)
+        {
+            mArchitectureInstance = instance;
+            CanGetModelExtension.SetArchitecture(mArchitectureInstance);
+            CanGetServiceExtension.SetArchitecture(mArchitectureInstance);
+            CanGetUtilityExtension.SetArchitecture(mArchitectureInstance);
+
+            CanSendCommandExtension.SetCommandHandler(commandHandler);
+            CanSendQueryExtension.SetQueryHandler(queryHandler);
+
+            CanRegisterEventExtension.SetTypeEventSystem(mTypeEventSystem);
+            CanSendEventExtension.SetTypeEventSystem(mTypeEventSystem);
+        }
+        void IArchitecture.InitArchitecture()
+        {
+            StartInit();
+            FinishInit();
+        }
+        private void StartInit()
+        {
+            mService = new HashSet<IService>();
+            mModels = new HashSet<IModel>();
+            Init();
+
+            foreach (var architectureModel in mModels)
+            {
+                architectureModel.OnInit();
+            }
+            foreach (var service in mService)
+            {
+                service.OnInit();
+            }
+        }
+        private void FinishInit()
+        {
+            mService.Clear();
+            mModels.Clear();
+            mService = null;
+            mModels = null;
+        }
+
+        public void RegisterService<TService>(TService service) where TService : IService
+        {
+            mContainer.Register<TService>(service);
+
+            mService.Add(service);
+        }
+        public void RegisterModel<TModel>(TModel model) where TModel : IModel
+        {
+            mContainer.Register<TModel>(model);
+
+            mModels.Add(model);
+        }
+        public void RegisterUtility<TUtility>(TUtility utility) where TUtility : IUtility
+        {
+            mContainer.Register<TUtility>(utility);
+        }
+
+        public TService GetService<TService>() where TService : class, IService
+        {
+            return mContainer.Get<TService>();
+        }
+        public TModel GetModel<TModel>() where TModel : class, IModel
+        {
+            return mContainer.Get<TModel>();
+        }
+        public TUtility GetUtility<TUtility>() where TUtility : class, IUtility
+        {
+            return mContainer.Get<TUtility>();
+        }
+    }
+
+    /// <summary>
+    /// 启动 Architecture
+    /// </summary>
+    internal sealed class ArchitectureInitiator
+    {
+        private ArchitectureInitiator() { }
+        private static ArchitectureInitiator mInstance;
+
+        private IArchitecture architectureInstance = null; // Architecture 实例
+        private Type architectureType = typeof(IArchitecture);
+        private bool architectureInited; // Architecture 是否初始化完成
+
+        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
+        private static void Initiate()
+        {
+            mInstance = new ArchitectureInitiator();
+
+            Type[] typeArr = Assembly.GetExecutingAssembly().GetTypes(); // 获取正在执行的程序集类型数组
+            for (int i = 0; i < typeArr.Length; i++)
+            {
+                Type tmpType = typeArr[i];
+                if (!tmpType.IsInterface)
+                {
+                    if (mInstance.IsArchitecture(tmpType))
+                    {
+                        mInstance.CreateArchitectureInstance(tmpType);
+                    }
+                }
+            }
+            mInstance.RegisterArchitecture();
+            mInstance.InitArchitecture();
+        }
+        private void RegisterArchitecture()
+        {
+            if (architectureInstance != null)
+            {
+                architectureInstance.SetArchitecture(architectureInstance);
+            }
+        }
+
+        private void InitArchitecture()
+        {
+            if (architectureInstance != null)
+            {
+                architectureInstance.InitArchitecture();
+            }
+        }
+
+
+        private bool IsArchitecture(Type tmpType)
+        {
+            if (architectureInited)
+            {
+                return false;
+            }
+            if (tmpType.IsAbstract)
+            {
+                return false;
+            }
+            return architectureType.IsAssignableFrom(tmpType); // 确定指定类型 c 的实例是否能分配给当前类型的变量
+        }
+
+        private void CreateArchitectureInstance(Type archiType)
+        {
+            if (architectureInstance == null)
+            {
+                architectureInstance = (IArchitecture)Activator.CreateInstance(archiType);
+                architectureInited = true;
+            }
+            else
+            {
+                throw new Exception("More than one Architecture sub-class in the application,it should be only one!");
+            }
+        }
+    }
+
+    public interface IOnEvent<T>
+    {
+        void OnEvent(T e);
+    }
+
+    public static class OnGlobalEventExtension
+    {
+        public static IUnRegister RegisterEvent<T>(this IOnEvent<T> self) where T :struct,IEvent
+        {
+            return TypeEventSystem.Global.Register<T>(self.OnEvent);
+        }
+
+        public static void UnRegisterEvent<T>(this IOnEvent<T> self) where T : struct,IEvent
+        {
+            TypeEventSystem.Global.UnRegister<T>(self.OnEvent);
+        }
+    }
+
+    #endregion
+
+    #region Controller
+
+    public interface IController : ICanGetUtility, ICanGetService, ICanGetModel,
+                                   ICanRegisterEvent, ICanSendQuery, ICanSendCommand
+    {
+
+    }
+
+    #endregion
+
+    #region  Service
+
+    public interface IService : ICanGetService, ICanGetModel, ICanGetUtility,
+                                ICanRegisterEvent, ICanSendEvent
+    {
+        void OnInit();
+    }
+
+    #endregion
+
+    #region  Model
+
+    public interface IModel : ICanGetUtility, ICanSendEvent
+    {
+        void OnInit();
+    }
+
+    #endregion
+
+    #region  Utility
+
+    public interface IUtility
+    {
+
+    }
+
+    #endregion
+
+    #region  Command
+
+    public interface ICommand : ICanGetService, ICanGetModel, ICanGetUtility,
+                                ICanSendEvent, ICanSendCommand, ICanSendQuery
+    {
+        void OnExcute();
+    }
+    public interface ICommand<T> : ICanGetService, ICanGetModel, ICanGetUtility,
+                                   ICanSendEvent, ICanSendCommand, ICanSendQuery
+    {
+        T OnExcute();
+    }
+
+    public interface ICommandHandler
+    {
+        void ExcuteCommand(ICommand command);
+        void ExcuteCommand<T>() where T : ICommand, new();
+        T ExcuteCommand<T>(ICommand<T> command);
+    }
+
+    public class DefaultCommandHandler : ICommandHandler
+    {
+        public void ExcuteCommand(ICommand command)
+        {
+            command.OnExcute();
+        }
+
+        public void ExcuteCommand<T>() where T : ICommand, new()
+        {
+            ExcuteCommand(new T());
+        }
+
+        public T ExcuteCommand<T>(ICommand<T> command)
+        {
+            return command.OnExcute();
+        }
+    }
+
+    #endregion
+
+    #region  Query
+
+    public interface IQuery<T> : ICanGetModel, ICanGetService, ICanSendQuery
+    {
+        T DoQuery();
+    }
+    public interface IQueryAsync : ICanGetModel, ICanGetService, ICanSendQuery
+    {
+        void DoQueryAsync<T>(Action<T> onQueryCompleted);
+    }
+    public interface IQueryResult<T>
+    {
+        void OnQuerySucceed(Action<T> onQuerySucceed);
+        void OnQueryFailed(Action onQueryFailed);
+    }
+    public interface IQueryHandler
+    {
+        T DoQuery<T>(IQuery<T> query);
+        K DoQuery<T, K>() where T : IQuery<K>, new();
+
+        IQueryResult<T> DoQueryAsync<T>(IQuery<T> query);
+        IQueryResult<K> DoQueryAsync<T, K>() where T : IQuery<K>, new();
+    }
+
+    public class DefaultQueryHandler : IQueryHandler
+    {
+        public T DoQuery<T>(IQuery<T> query)
+        {
+            return query.DoQuery();
+        }
+
+        public K DoQuery<T, K>() where T : IQuery<K>, new()
+        {
+            return DoQuery(new T());
+        }
+
+        public IQueryResult<T> DoQueryAsync<T>(IQuery<T> query)
+        {
+            DefaultQueryResult<T> queryResult = new DefaultQueryResult<T>();
+            var queryTask = Task.Run(() =>
+            {
+                return query.DoQuery();
+            });
+            var awaiter = queryTask.GetAwaiter();
+            awaiter.OnCompleted(() =>
+            {
+                if (queryTask.IsFaulted | queryTask.IsCanceled)
+                {
+                    queryResult.TriggerFailed();
+                }
+                else
+                {
+                    queryResult.TriggerSuccess(awaiter.GetResult());
+                }
+            });
+            return queryResult;
+        }
+
+        public IQueryResult<K> DoQueryAsync<T, K>() where T : IQuery<K>, new()
+        {
+            return DoQueryAsync(new T());
+        }
+    }
+
+    public class DefaultQueryResult<T> : IQueryResult<T>
+    {
+        private Action<T> mOnQuerySucceed;
+        private Action mOnQueryFailed;
+
+        public void OnQuerySucceed(Action<T> onQuerySucceed)
+        {
+            mOnQuerySucceed += onQuerySucceed;
+        }
+        public void OnQueryFailed(Action onQueryFailed)
+        {
+            mOnQueryFailed += onQueryFailed;
+        }
+        public void TriggerSuccess(T result)
+        {
+            mOnQuerySucceed?.Invoke(result);
+        }
+        public void TriggerFailed()
+        {
+            mOnQueryFailed?.Invoke();
+        }
+    }
+    #endregion
+
+    #region Rule
+
+    /// <summary>
+    /// 能够 GetModel 的接口
+    /// </summary>
+    public interface ICanGetModel
+    {
+    }
+
+    /// <summary>
+    /// ICanGetModel 的静态扩展 GetModel
+    /// </summary>
+    public static class CanGetModelExtension
+    {
+        public static T GetModel<T>(this ICanGetModel self) where T : class, IModel
+        {
+            return _architecture.GetModel<T>();
+        }
+
+        private static IArchitecture _architecture;
+        public static void SetArchitecture(IArchitecture architecture)
+        {
+            _architecture = architecture;
+        }
+    }
+    /// <summary>
+    /// 能够 GetService 的接口
+    /// </summary>
+    public interface ICanGetService
+    {
+    }
+
+    /// <summary>
+    /// ICanGetService 的静态扩展 GetService
+    /// </summary>
+    public static class CanGetServiceExtension
+    {
+        public static T GetService<T>(this ICanGetService self) where T : class, IService
+        {
+            return _architecture.GetService<T>();
+        }
+
+        private static IArchitecture _architecture;
+        public static void SetArchitecture(IArchitecture architecture)
+        {
+            _architecture = architecture;
+        }
+    }
+
+    /// <summary>
+    /// 能够 GetUtility 的接口
+    /// </summary>
+    public interface ICanGetUtility
+    {
+    }
+
+    /// <summary>
+    /// ICanGetUtility 的静态扩展 GetUtility
+    /// </summary>
+    public static class CanGetUtilityExtension
+    {
+        public static T GetUtility<T>(this ICanGetUtility self) where T : class, IUtility
+        {
+            return _architecture.GetUtility<T>();
+        }
+
+        private static IArchitecture _architecture;
+        public static void SetArchitecture(IArchitecture architecture)
+        {
+            _architecture = architecture;
+        }
+    }
+
+    /// <summary>
+    /// 能够 RegisterEvent 的接口
+    /// </summary>
+    public interface ICanRegisterEvent
+    {
+    }
+
+    /// <summary>
+    /// ICanRegisterEvent 的静态扩展 RegisterEvent
+    /// </summary>
+    public static class CanRegisterEventExtension
+    {
+        public static IUnRegister RegisterEvent<T>(this ICanRegisterEvent self, Action<T> onEvent) where T : IEvent
+        {
+            if(typeEventSystem==null) return null;
+            return typeEventSystem.Register<T>(onEvent);
+        }
+
+        public static void UnRegisterEvent<T>(this ICanRegisterEvent self, Action<T> onEvent) where T : IEvent
+        {
+            typeEventSystem.UnRegister<T>(onEvent);
+        }
+
+        private static ITypeEventSystem typeEventSystem;
+        public static void SetTypeEventSystem(ITypeEventSystem mTypeEventSystem)
+        {
+            typeEventSystem = mTypeEventSystem;
+        }
+    }
+
+    /// <summary>
+    /// 能够 SendCommand 的接口
+    /// </summary>
+    public interface ICanSendCommand
+    {
+    }
+
+    /// <summary>
+    /// ICanSendCommand 的静态扩展 SendCommand
+    /// </summary>
+    public static class CanSendCommandExtension
+    {
+        public static void SendCommand<T>(this ICanSendCommand self) where T : ICommand, new()
+        {
+            mCommandHandler.ExcuteCommand<T>();
+        }
+
+        public static void SendCommand<T>(this ICanSendCommand self, T command) where T : ICommand
+        {
+            mCommandHandler.ExcuteCommand(command);
+        }
+
+        public static T SendCommand<T>(this ICanSendCommand self, ICommand<T> command)
+        {
+            return mCommandHandler.ExcuteCommand(command);
+        }
+
+        private static ICommandHandler mCommandHandler;
+        public static void SetCommandHandler(ICommandHandler commandHandler)
+        {
+            mCommandHandler = commandHandler;
+        }
+    }
+
+    /// <summary>
+    /// 能够 SendEvent 的接口
+    /// </summary>
+    public interface ICanSendEvent
+    {
+    }
+
+    /// <summary>
+    /// ICanSendEvent 的静态扩展 SendEvent
+    /// </summary>
+    public static class CanSendEventExtension
+    {
+        public static void SendEvent<T>(this ICanSendEvent self) where T : IEvent, new()
+        {
+            typeEventSystem.Send<T>();
+        }
+
+        public static void SendEvent<T>(this ICanSendEvent self, T e) where T : IEvent
+        {
+            typeEventSystem.Send<T>(e);
+        }
+
+        private static ITypeEventSystem typeEventSystem;
+        public static void SetTypeEventSystem(ITypeEventSystem mTypeEventSystem)
+        {
+            typeEventSystem = mTypeEventSystem;
+        }
+    }
+
+    /// <summary>
+    /// 能够 SendQuery 的接口
+    /// </summary>
+    public interface ICanSendQuery
+    {
+    }
+
+    /// <summary>
+    /// ICanSendQuery 的静态扩展 SendQuery
+    /// </summary>
+    public static class CanSendQueryExtension
+    {
+        public static T SendQuery<T>(this ICanSendQuery self, IQuery<T> queryInstance)
+        {
+            return _queryHandler.DoQuery<T>(queryInstance);
+        }
+        public static K SendQuery<T, K>(this ICanSendQuery self) where T : IQuery<K>, new()
+        {
+            return _queryHandler.DoQuery<T, K>();
+        }
+        public static IQueryResult<T> SendQueryAsync<T>(this ICanSendQuery self, IQuery<T> queryInstance)
+        {
+            return _queryHandler.DoQueryAsync<T>(queryInstance);
+        }
+        public static IQueryResult<K> SendQueryAsync<T, K>(this ICanSendQuery self) where T : IQuery<K>, new()
+        {
+            return _queryHandler.DoQueryAsync<T, K>();
+        }
+        private static IQueryHandler _queryHandler;
+        public static void SetQueryHandler(IQueryHandler queryHandler)
+        {
+            _queryHandler = queryHandler;
+        }
+    }
+
+    #endregion
+
+    #region  TypeEventSystem
+
+    /// <summary>
+    /// 取消监听接口
+    /// </summary>
+    public interface IUnRegister
+    {
+        void UnRegister();
+    }
+
+    /// <summary>
+    /// 取消监听列表接口
+    /// </summary>
+    public interface IUnRegisterList
+    {
+        List<IUnRegister> UnRegistersList { get; }
+    }
+
+    /// <summary>
+    /// 取消监听列表接口的静态扩展
+    /// 【IUnRegister 添加进 IUnRegisterList】
+    /// 【IUnRegisterList全部取消监听】
+    /// </summary>
+    public static class IUnRegisterListExtension
+    {
+        public static void AddToUnRegisterList(this IUnRegister self, IUnRegisterList unRegisterList)
+        {
+            unRegisterList.UnRegistersList.Add(self);
+        }
+
+        public static void UnRegisterAll(this IUnRegisterList self)
+        {
+            foreach (IUnRegister unRegister in self.UnRegistersList)
+            {
+                unRegister.UnRegister();
+            }
+            self.UnRegistersList.Clear();
+        }
+    }
+
+    /// <summary>
+    /// 取消监听的类
+    /// </summary>
+    public struct CustomUnRegister : IUnRegister
+    {
+        private Action mOnUnregister { get; set; }
+
+        public CustomUnRegister(Action onUnRegsiter)
+        {
+            mOnUnregister = onUnRegsiter;
+        }
+
+        public void UnRegister()
+        {
+            mOnUnregister?.Invoke();
+            mOnUnregister = null;
+        }
+    }
+
+    /// <summary>
+    /// 物体销毁时触发取消监听
+    /// </summary>
+    public class UnRegisterOnDestroyTrigger : MonoBehaviour
+    {
+        private readonly HashSet<IUnRegister> mUnRegisters = new HashSet<IUnRegister>();
+
+        public void AddUnRegister(IUnRegister unRegister)
+        {
+            mUnRegisters.Add(unRegister);
+        }
+
+        public void RemoveUnRegister(IUnRegister unRegister)
+        {
+            mUnRegisters.Remove(unRegister);
+        }
+
+        private void OnDestroy()
+        {
+            foreach (IUnRegister unRegister in mUnRegisters)
+            {
+                unRegister.UnRegister();
+            }
+            mUnRegisters.Clear();
+        }
+    }
+
+    /// <summary>
+    /// 取消监听的静态扩展
+    /// 【物体销毁时触发取消监听】
+    /// 【组件所属物体销毁时触发取消监听】
+    /// </summary>
+    public static class UnRegisterExtension
+    {
+        /// <summary>
+        /// 物体:物体销毁时触发取消监听
+        /// </summary>
+        /// <param name="unRegister">取消监听的接口</param>
+        /// <param name="component">物体对象</param>
+        /// <returns>取消监听的接口</returns>
+        public static IUnRegister UnRegisterWhenGameObjectDestroyed(this IUnRegister unRegister, GameObject go)
+        {
+            UnRegisterOnDestroyTrigger trigger = go.GetComponent<UnRegisterOnDestroyTrigger>();
+
+            if (!trigger)
+            {
+                trigger = go.AddComponent<UnRegisterOnDestroyTrigger>();
+            }
+
+            trigger.AddUnRegister(unRegister);
+
+            return unRegister;
+        }
+
+        /// <summary>
+        /// 组件:物体销毁时触发取消监听
+        /// </summary>
+        /// <param name="unRegister">取消监听的接口</param>
+        /// <param name="component">组件对象</param>
+        /// <returns>取消监听的接口</returns>
+        public static IUnRegister UnRegisterWhenGameObjectDestroyed<T>(this IUnRegister unRegister, T component) where T : Component
+        {
+            return unRegister.UnRegisterWhenGameObjectDestroyed(component.gameObject);
+        }
+    }
+
+    public interface ITypeEventSystem
+    {
+        IUnRegister Register<T>(Action<T> onEvent) where T: IEvent;
+        void UnRegister<T>(Action<T> onEvent) where T: IEvent;
+        void Send<T>() where T: IEvent, new();
+        void Send<T>(T e) where T: IEvent;
+    }
+    public class TypeEventSystem:ITypeEventSystem
+    {
+        private readonly EasyEvents mEvents = new EasyEvents();
+        public static readonly TypeEventSystem Global = new TypeEventSystem();
+
+        public void Send<T>() where T : IEvent,new()
+        {
+            mEvents.GetEvent<EasyEvent<T>>()?.Trigger(new T());
+        }
+
+        public void Send<T>(T e) where T: IEvent
+        {
+            mEvents.GetEvent<EasyEvent<T>>()?.Trigger(e);
+        }
+
+        public IUnRegister Register<T>(Action<T> onEvent)where T: IEvent
+        {
+            var e = mEvents.GetOrAddEvent<EasyEvent<T>>();
+            return e.Register(onEvent);
+        }
+
+        public void UnRegister<T>(Action<T> onEvent)where T: IEvent
+        {
+            var e = mEvents.GetEvent<EasyEvent<T>>();
+            if (e != null)
+            {
+                e.UnRegister(onEvent);
+            }
+        }
+    }
+
+    #endregion
+
+    #region  IOC
+
+    /// <summary>
+    /// IOC 容器 ,将类型对应的对象存储进字典
+    /// 【注册 + 获取】
+    /// </summary>
+    public class IOCContainer
+    {
+        private Dictionary<Type, object> mInstances = new Dictionary<Type, object>();
+
+        /// <summary>
+        /// IOC 容器注册方法
+        /// </summary>
+        /// <param name="instance">实例</param>
+        /// <typeparam name="T">指定类型</typeparam>
+        public void Register<T>(T instance)
+        {
+            Type key = typeof(T);
+
+            if (mInstances.ContainsKey(key))
+            {
+                mInstances[key] = instance;
+            }
+            else
+            {
+                mInstances.Add(key, instance);
+            }
+        }
+
+        /// <summary>
+        /// IOC 容器获取方法
+        /// </summary>
+        /// <typeparam name="T">指定类型</typeparam>
+        public T Get<T>() where T : class
+        {
+            Type key = typeof(T);
+
+            if (mInstances.TryGetValue(key, out object retInstance))
+            {
+                return retInstance as T;
+            }
+
+            return null;
+        }
+    }
+
+    #endregion
+
+    #region BindableProperty
+
+    public interface IReadonlyBindableProperty<T>
+    {
+        T Value { get; }
+
+        IUnRegister Register(Action<T> onValueChanged);
+        void UnRegister(Action<T> onValueChanged);
+        IUnRegister RegisterWithInitValue(Action<T> action);
+    }
+
+    public interface IBindableProperty<T> : IReadonlyBindableProperty<T>
+    {
+        new T Value { get; set; }
+        void SetValueWithoutEvent(T newValue);
+    }
+
+
+    public class BindableProperty<T> : IBindableProperty<T>
+    {
+        private Action<T> mOnValueChanged = (v) => { };
+
+        public BindableProperty(T defaultValue = default)
+        {
+            mValue = defaultValue;
+        }
+
+        protected T mValue;
+
+        public T Value
+        {
+            get => GetValue();
+            set
+            {
+                if (value == null && mValue == null) return;
+                if (value != null && value.Equals(mValue)) return;
+
+                SetValue(value);
+                mOnValueChanged?.Invoke(value);
+            }
+        }
+
+        protected virtual void SetValue(T newValue)
+        {
+            mValue = newValue;
+        }
+
+        protected virtual T GetValue()
+        {
+            return mValue;
+        }
+
+        public void SetValueWithoutEvent(T newValue)
+        {
+            mValue = newValue;
+        }
+
+
+        public IUnRegister Register(Action<T> onValueChanged)
+        {
+            mOnValueChanged += onValueChanged;
+            return new BindablePropertyUnRegister<T>()
+            {
+                BindableProperty = this,
+                OnValueChanged = onValueChanged
+            };
+        }
+
+        public IUnRegister RegisterWithInitValue(Action<T> onValueChanged)
+        {
+            onValueChanged(mValue);
+            return Register(onValueChanged);
+        }
+
+        public static implicit operator T(BindableProperty<T> property)
+        {
+            return property.Value;
+        }
+
+        public override string ToString()
+        {
+            return Value.ToString();
+        }
+
+        public void UnRegister(Action<T> onValueChanged)
+        {
+            mOnValueChanged -= onValueChanged;
+        }
+    }
+
+    public class BindablePropertyUnRegister<T> : IUnRegister
+    {
+        public BindableProperty<T> BindableProperty { get; set; }
+
+        public Action<T> OnValueChanged { get; set; }
+
+        public void UnRegister()
+        {
+            BindableProperty.UnRegister(OnValueChanged);
+
+            BindableProperty = null;
+            OnValueChanged = null;
+        }
+    }
+
+    #endregion
+
+    #region EasyEvent
+
+    public interface IEasyEvent
+    {
+
+    }
+
+    public class EasyEvent : IEasyEvent
+    {
+        private Action mOnEvent = () => { };
+
+        public IUnRegister Register(Action onEvent)
+        {
+            mOnEvent += onEvent;
+
+            return new CustomUnRegister(() =>
+            {
+                UnRegister(onEvent);
+            });
+        }
+
+        public void UnRegister(Action onEvent)
+        {
+            mOnEvent -= onEvent;
+        }
+
+        public void Trigger()
+        {
+            mOnEvent?.Invoke();
+        }
+    }
+
+    public class EasyEvent<T> : IEasyEvent
+    {
+        private Action<T> mOnEvent = e => { };
+
+        public IUnRegister Register(Action<T> onEvent)
+        {
+            mOnEvent += onEvent;
+
+            return new CustomUnRegister(() =>
+            {
+                UnRegister(onEvent);
+            });
+        }
+
+        public void UnRegister(Action<T> onEvent)
+        {
+            mOnEvent -= onEvent;
+        }
+
+        public void Trigger(T t)
+        {
+            mOnEvent?.Invoke(t);
+        }
+    }
+
+    public class EasyEvent<T, K> : IEasyEvent
+    {
+        private Action<T, K> mOnEvent = (t, k) => { };
+
+        public IUnRegister Register(Action<T, K> onEvent)
+        {
+            mOnEvent += onEvent;
+
+            return new CustomUnRegister(() =>
+            {
+                UnRegister(onEvent);
+            });
+        }
+
+        public void UnRegister(Action<T, K> onEvent)
+        {
+            mOnEvent -= onEvent;
+        }
+
+        public void Trigger(T t, K k)
+        {
+            mOnEvent?.Invoke(t, k);
+        }
+    }
+
+    public class EasyEvent<T, K, S> : IEasyEvent
+    {
+        private Action<T, K, S> mOnEvent = (t, k, s) => { };
+
+        public IUnRegister Register(Action<T, K, S> onEvent)
+        {
+            mOnEvent += onEvent;
+
+            return new CustomUnRegister(() =>
+            {
+                UnRegister(onEvent);
+            });
+        }
+
+        public void UnRegister(Action<T, K, S> onEvent)
+        {
+            mOnEvent -= onEvent;
+        }
+
+        public void Trigger(T t, K k, S s)
+        {
+            mOnEvent?.Invoke(t, k, s);
+        }
+    }
+
+    public class EasyEvents
+    {
+        private static EasyEvents mGlobalEvents = new EasyEvents();
+
+        public static T Get<T>() where T : IEasyEvent
+        {
+            return mGlobalEvents.GetEvent<T>();
+        }
+
+        public static void Register<T>() where T : IEasyEvent, new()
+        {
+            mGlobalEvents.AddEvent<T>();
+        }
+
+        private Dictionary<Type, IEasyEvent> mTypeEvents = new Dictionary<Type, IEasyEvent>();
+
+        public void AddEvent<T>() where T : IEasyEvent, new()
+        {
+            mTypeEvents.Add(typeof(T), new T());
+        }
+
+        public T GetEvent<T>() where T : IEasyEvent
+        {
+            if (mTypeEvents.TryGetValue(typeof(T), out IEasyEvent e))
+            {
+                return (T)e;
+            }
+
+            return default;
+        }
+
+        public T GetOrAddEvent<T>() where T : IEasyEvent, new()
+        {
+            var eType = typeof(T);
+            if (mTypeEvents.TryGetValue(eType, out var e))
+            {
+                return (T)e;
+            }
+
+            var t = new T();
+            mTypeEvents.Add(eType, t);
+            return t;
+        }
+    }
+    #endregion
+
+    #region Event
+
+    public interface IEvent
+    {
+
+    }
+    #endregion
+}

+ 11 - 0
Assets/Scripts/Blue/0.FrameworkDesign/BlueVersion3.cs.meta

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

+ 0 - 7
Assets/Scripts/Blue/0.FrameworkDesign/Command/ICommand.cs

@@ -1,7 +0,0 @@
-namespace Blue
-{
-    public interface ICommand:ICanGetService,ICanGetModel,ICanGetUtility,ICanTriggerEvent,ICanSendCommand
-    {
-        void OnExcute();
-    }
-}

+ 0 - 202
Assets/Scripts/Blue/0.FrameworkDesign/Core/AbstractArchitecture.cs

@@ -1,202 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Blue
-{
-    /// <summary>
-    /// Architecture抽象类,继承自IArchitecture
-    /// </summary>
-    public abstract class AbstractArchitecture<T>:IArchitecture where T:AbstractArchitecture<T>,new()
-    {
-        private static IArchitecture architectureInstance;
-        private List<IModel> modelList;
-        private List<IService> serviceList;
-        private IOCContainer modelContainer = new IOCContainer();
-        private IOCContainer serviceContainer=new IOCContainer();
-        private IOCContainer utilityContainer = new IOCContainer();
-        private ITypeEventSystem eventSystem=new DefaultTypeEventSystem();
-        private IQueryCommandHandler commandHandle=new QueryDefault_Hand();
-        private IQueryHandler queryHandler = new DefaultQueryHandler();
-
-        /// <summary>
-        /// 设置Architecture_Instance
-        /// </summary>
-        void IArchitecture.SetArchitectureInstance(IArchitecture instance)
-        {
-            architectureInstance = instance;
-            ICanGetModelExtension.SetArchitecture(architectureInstance);
-            ICanGetServiceExtension.SetArchitecture(architectureInstance);
-            ICanGetUtilityExtension.SetArchitecture(architectureInstance);
-            IArchitectureModuleExtension.SetArchitecture(architectureInstance);
-            ICanSendCommandExtension.SetCommandHandler(commandHandle);
-            ICanTriggerEventExtension.SetEventSystem(eventSystem);
-            ICanSubscribeEventExtension.SetEventSystem(eventSystem);
-            IChainEventUnSubcribeExtension.SetEventSystem(eventSystem);
-            ICanSendQueryExtension.SetQueryHandler(queryHandler);
-        }
-
-        /// <summary>
-        /// 注册
-        /// </summary>
-        void IArchitecture.Register()
-        {
-            modelList = new List<IModel>();
-            serviceList = new List<IService>();
-            OnInit();
-        }
-
-        /// <summary>
-        /// 初始化Architecture
-        /// </summary>
-        void IArchitecture.InitArchitecture()
-        {
-            InitModels();
-            InitServices();
-        }
-
-        /// <summary>
-        /// 完成初始化Architecture
-        /// </summary>
-        void IArchitecture.FinishInit()
-        {
-            modelList.Clear();
-            serviceList.Clear();
-            modelList = null;
-            serviceList = null;
-        }
-
-        /// <summary>
-        /// 初始化 Model 层
-        /// </summary>
-        private void InitModels()
-        {
-            foreach (var model in modelList)
-            {
-                model.OnInit();
-            }
-            /*modelList.Clear();
-            modelList = null;*/
-        }
-
-        /// <summary>
-        /// 初始化 Services 层
-        /// </summary>
-        private void InitServices()
-        {
-            foreach (var service in serviceList)
-            {
-                service.OnInit();
-            }
-            /*serviceList.Clear();
-            serviceList = null;*/
-        }
-
-        protected abstract void OnInit();
-
-        /// <summary>
-        /// 设置事件系统
-        /// </summary>
-        protected virtual void SetTypeEventSystem(ITypeEventSystem typeEventSystem)
-        {
-            eventSystem = typeEventSystem;
-        }
-
-        /// <summary>
-        /// 获取 Model
-        /// </summary>
-        public K GetModel<K>() where K:IModel
-        {
-            return modelContainer.Get<K>();
-        }
-
-        /// <summary>
-        /// 获取 Service
-        /// </summary>
-        public K GetService<K>() where K : IService
-        {
-            return serviceContainer.Get<K>();
-        }
-
-        /// <summary>
-        /// 获取 Utility
-        /// </summary>
-        public K GetUtility<K>() where K : IUtility
-        {
-            return utilityContainer.Get<K>();
-        }
-
-        /// <summary>
-        /// 获取 Model
-        /// </summary>
-        public object GetModel(Type type)
-        {
-            return modelContainer.Get(type);
-        }
-
-        /// <summary>
-        /// 获取 Service
-        /// </summary>
-        public object GetService(Type type)
-        {
-            return serviceContainer.Get(type);
-        }
-
-        /// <summary>
-        /// 获取 Utility
-        /// </summary>
-        public object GetUtility(Type type)
-        {
-            return utilityContainer.Get(type);
-        }
-
-        /// <summary>
-        /// 注册 Model
-        /// </summary>
-        public void RegisterModel<K>() where K :  IModel, new()
-        {
-            RegisterModel(new K());
-        }
-
-        /// <summary>
-        /// 注册 Service
-        /// </summary>
-        public void RegisterService<K>() where K : IService, new()
-        {
-            RegisterService(new K());
-        }
-
-        /// <summary>
-        /// 注册 Utility
-        /// </summary>
-        public void RegisterUtility<K>() where K : IUtility, new()
-        {
-            RegisterUtility(new K());
-        }
-
-        /// <summary>
-        /// 注册 Model
-        /// </summary>
-        public void RegisterModel<K>(K modelInstance) where K : IModel
-        {
-            modelContainer.Register(modelInstance);
-            modelList.Add(modelInstance);
-        }
-
-        /// <summary>
-        /// 注册 Service
-        /// </summary>
-        public void RegisterService<K>(K serviceInstance) where K : IService
-        {
-            serviceContainer.Register(serviceInstance);
-            serviceList.Add(serviceInstance);
-        }
-
-        /// <summary>
-        /// 注册 Utility
-        /// </summary>
-        public void RegisterUtility<K>(K utilityInstance) where K : IUtility
-        {
-            utilityContainer.Register(utilityInstance);
-        }
-    }
-}

+ 0 - 133
Assets/Scripts/Blue/0.FrameworkDesign/Core/ControllerAr.cs

@@ -1,133 +0,0 @@
-using System;
-using System.Reflection;
-using UnityEngine;
-using UnityEngine.Scripting;
-
-namespace Blue
-{
-    /// <summary>
-    /// 控制的Archi
-    /// </summary>
-    [Preserve]
-    internal sealed class ControllerAr
-    {
-        private ControllerAr() { }
-
-        private Type architectureType = typeof(IArchitecture);
-        private IArchitecture architectureInstance = null;
-        private IInjector mInjector;
-        private bool architectureInited = false;
-        //private bool
-        private static ControllerAr mInstance;
-        private ModuleInitiator moduleInitiator;
-
-        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
-        private static void Initiate()
-        {
-            mInstance = new ControllerAr();
-            mInstance.CreateInjector();
-            mInstance.CreateModuleInitiator();
-            Type[] typeArr = Assembly.GetExecutingAssembly().GetTypes();
-            int typeLength = typeArr.Length;
-            for (int i = 0; i < typeLength; i++)
-            {
-                Type tmpType = typeArr[i];
-                if (!tmpType.IsInterface) 
-                {
-                    if (mInstance.IsArchitecture(tmpType))
-                    {
-                        mInstance.CreateArchitectureInstance(tmpType);
-                    }
-                    mInstance.PrepairModuleData(tmpType);
-                    mInstance.PrepairInjectionData(tmpType);
-                }
-            }
-            mInstance.RegisterArchitecture();
-            StartInject();
-            mInstance.InitArchitecture();
-            mInstance.FinishInit();
-        }
-        //[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
-        private static void StartInject() 
-        {
-            //Debug.Log("StartInject");
-            mInstance.Inject();
-            //mInstance.Clear();
-        }
-        private void Clear() 
-        {
-            mInjector.Dispose();
-            moduleInitiator.Dispose();
-            mInjector = null;
-            moduleInitiator = null;
-            mInstance = null;
-        }
-        private void Inject() 
-        {
-            mInjector.Inject(architectureInstance);
-        }
-        private void FinishInit()
-        {
-            architectureInstance.FinishInit();
-            mInstance.Clear();
-        }
-        private void RegisterArchitecture()
-        {
-            if (architectureInstance != null)
-            {
-                architectureInstance.SetArchitectureInstance(architectureInstance);
-                architectureInstance.Register();
-                InitModule();
-            }
-        }
-        private void InitArchitecture()
-        {
-            architectureInstance.InitArchitecture();
-        }
-        private void InitModule() 
-        {
-            moduleInitiator.InitModule();
-        }
-        private bool IsArchitecture(Type tmpType)
-        {
-            if (architectureInited) 
-            {
-                return false;
-            }
-            if (tmpType.IsAbstract)
-            {
-                return false;
-            }
-            return architectureType.IsAssignableFrom(tmpType);
-        }
-        private void PrepairModuleData(Type type) 
-        {
-            moduleInitiator.PrepairModuleData(type);
-        }
-
-        private void CreateArchitectureInstance(Type archiType)
-        {
-            if (architectureInstance == null)
-            {
-                architectureInstance = (IArchitecture)Activator.CreateInstance(archiType);
-                architectureInited = true;
-            }
-            else
-            {
-                throw new Exception("More than one Architecture sub-class in the application,it should be only one!");
-            }
-        }
-        private void PrepairInjectionData(Type type) 
-        {
-            mInjector.PrepairInjectionData(type);
-        }
-        private void CreateModuleInitiator() 
-        {
-            moduleInitiator=new ModuleInitiator();
-        }
-        private void CreateInjector() 
-        {
-            mInjector = new ArchitectureInjecter();
-        }
-    }
-}

+ 0 - 29
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitecture.cs

@@ -1,29 +0,0 @@
-using System;
-using UnityEngine.Scripting;
-namespace Blue
-{
-    /// <summary>
-    /// Architecture 接口
-    /// </summary>
-    [RequireImplementors]
-    public interface IArchitecture
-    {
-        void SetArchitectureInstance(IArchitecture instance);
-        void Register();
-        void InitArchitecture();
-        void FinishInit();
-        T GetService<T>() where T : IService;
-        T GetModel<T>() where T : IModel;
-        T GetUtility<T>() where T : IUtility;
-        object GetService(Type type);
-        object GetModel(Type type);
-        object GetUtility(Type type);
-        void RegisterService<T>() where T : IService,new();
-        void RegisterModel<T>() where T : IModel,new();
-        void RegisterUtility<T>() where T : IUtility,new();
-
-        void RegisterModel<T>(T modelInstance) where T : IModel;
-        void RegisterService<T>(T serviceInstance) where T : IService;
-        void RegisterUtility<T>(T utilityInstance) where T : IUtility;
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModule.cs

@@ -1,11 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// 模块的基本接口
-    /// 所有模块都需要继承此接口并实现
-    /// </summary>
-    public interface IArchitectureModule
-    {
-        void OnInit();
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModule.cs.meta

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

+ 0 - 36
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModuleExtension.cs

@@ -1,36 +0,0 @@
-namespace Blue
-{
-    public static class IArchitectureModuleExtension
-    {
-        private static IArchitecture _architecture;
-        public static void SetArchitecture(IArchitecture architecture)
-        {
-            _architecture = architecture;
-        }
-        public static void RegisterModel<T>(this IArchitectureModule self) where T : IModel, new()
-        {
-            _architecture.RegisterModel<T>();
-        }
-        public static void RegisterModel<T>(this IArchitectureModule self,T modelInstance) where T : IModel
-        {
-            _architecture.RegisterModel<T>(modelInstance);
-        }
-
-        public static void RegisterService<T>(this IArchitectureModule self) where T:IService,new()
-        {
-            _architecture.RegisterService<T>();
-        }
-        public static void RegisterService<T>(this IArchitectureModule self,T serviceInstance) where T : IService
-        {
-            _architecture.RegisterService<T>(serviceInstance);
-        }
-        public static void RegisterUtility<T>(this IArchitectureModule self) where T : IUtility, new()
-        {
-            _architecture.RegisterUtility<T>();
-        }
-        public static void RegisterUtility<T>(this IArchitectureModule self, T utilityInstance) where T : IUtility
-        {
-            _architecture.RegisterUtility<T>(utilityInstance);
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IArchitectureModuleExtension.cs.meta

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

+ 0 - 6
Assets/Scripts/Blue/0.FrameworkDesign/Core/IAuto.cs

@@ -1,6 +0,0 @@
-namespace Blue
-{
-    public interface IAuto
-    {
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IAuto.cs.meta

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

+ 0 - 9
Assets/Scripts/Blue/0.FrameworkDesign/Core/IController.cs

@@ -1,9 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// Controller 层接口
-    /// </summary>
-    public interface IController :IAuto,ICanGetService,ICanGetModel,ICanGetUtility,ICanSendCommand,ICanSubscribeEvent,ICanSendQuery
-    {
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IController.cs.meta

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

+ 0 - 10
Assets/Scripts/Blue/0.FrameworkDesign/Core/IModel.cs

@@ -1,10 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// Model 层接口
-    /// </summary>
-    public interface IModel:IAuto,ICanGetUtility,ICanTriggerEvent
-    {
-        void OnInit();
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IModel.cs.meta

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

+ 0 - 10
Assets/Scripts/Blue/0.FrameworkDesign/Core/IService.cs

@@ -1,10 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// Service 层接口
-    /// </summary>
-    public interface IService : IAuto,ICanGetService, ICanSendCommand,ICanGetModel, ICanGetUtility,ICanSubscribeEvent,ICanTriggerEvent,ICanSendQuery
-    {
-        void OnInit();
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IService.cs.meta

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

+ 0 - 9
Assets/Scripts/Blue/0.FrameworkDesign/Core/IUtility.cs

@@ -1,9 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// Utility 层接口
-    /// </summary>
-    public interface IUtility:IAuto,ICanGetUtility
-    {
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/IUtility.cs.meta

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

+ 0 - 54
Assets/Scripts/Blue/0.FrameworkDesign/Core/ModuleInitiator.cs

@@ -1,54 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Blue
-{
-    public class ModuleInitiator:IDisposable
-    {
-        private Type moduleInterfaceType;
-        private List<Type> moduleList;
-        public ModuleInitiator() 
-        {
-            moduleInterfaceType = typeof(IArchitectureModule);
-            moduleList = new List<Type>();
-        }
-        public void PrepairModuleData(Type type) 
-        {
-            if (IsModule(type)) 
-            {
-                moduleList.Add(type);
-            }
-        }
-        public void InitModule() 
-        {
-            int moduleCount = moduleList.Count;
-            if (moduleCount == 0) 
-            {
-                return;
-            }
-            for (int i = 0; i < moduleCount; i++)
-            {
-                IArchitectureModule module =(IArchitectureModule)Activator.CreateInstance(moduleList[i]);
-                module.OnInit();
-            }
-        }
-
-        public void Dispose() 
-        {
-            moduleInterfaceType = null;
-            moduleList = null;
-        }
-        private bool IsModule(Type type)
-        {
-            if (type.IsInterface)
-            {
-                return false;
-            }
-            if (type.IsAbstract)
-            {
-                return false;
-            }
-            return moduleInterfaceType.IsAssignableFrom(type);
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Core/ModuleInitiator.cs.meta

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

BIN
Assets/Scripts/Blue/0.FrameworkDesign/Design.eddx


+ 0 - 22
Assets/Scripts/Blue/0.FrameworkDesign/Event/BindablePropertyUnSubscribe.cs

@@ -1,22 +0,0 @@
-using System;
-namespace Blue
-{
-    public struct BindablePropertyUnSubscribe<T> : IUnSubscribe
-    {
-        private Action<T> _onPropertyChanged;
-        private BindableProperty<T> _property;
-
-        public BindablePropertyUnSubscribe(BindableProperty<T> property,Action<T> onPropertyChanged) 
-        {
-            _property = property;
-            _onPropertyChanged = onPropertyChanged;
-        }
-
-        public void UnSubscribe()
-        {
-            _property.UnSubscribe(_onPropertyChanged);
-            _property = null;
-            _onPropertyChanged = null;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/BindablePropertyUnSubscribe.cs.meta

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

+ 0 - 41
Assets/Scripts/Blue/0.FrameworkDesign/Event/ChainEventSubscription.cs

@@ -1,41 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-
-namespace Blue {
-    public class ChainEventSubscription : IChainEventSubscription
-    {
-        private Dictionary<Type, int> actionHashPool;
-        private Type mChainEventType;
-        public ChainEventSubscription(Type chainEventType)
-        {
-            mChainEventType = chainEventType;
-        }
-        public int SubscribeCount => actionHashPool.Count;
-
-        public IChainEventUnSubscribe Subscribe(Type eventType,int actionHashCode,Action onOnSubscribe)
-        {
-            actionHashPool.TryAdd(eventType, actionHashCode);
-            return new DefaultChainEventUnSubcribe(mChainEventType, () => { onOnSubscribe?.Invoke(); UnSubscribe(eventType); });
-        }
-        public bool IsSubscribed(Type eventType)
-        {
-            return actionHashPool.ContainsKey(eventType);
-        }
-        public int GetActionHashCode(Type eventType)
-        {
-            return actionHashPool[eventType];
-        }
-        public List<Type> GetEventTypeList()
-        {
-            List<Type> valueList = new List<Type>(actionHashPool.Count);
-            valueList.AddRange(actionHashPool.Keys);
-            return valueList;
-        }
-
-        public bool UnSubscribe(Type eventType)
-        {
-            return actionHashPool.Remove(eventType);
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/ChainEventSubscription.cs.meta

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

+ 0 - 27
Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultChainEventUnSubcribe.cs

@@ -1,27 +0,0 @@
-using System;
-namespace Blue
-{
-
-    public class DefaultChainEventUnSubcribe : IChainEventUnSubscribe
-    {
-        private Action mOnUnSub;
-        private Type mChainEventType;
-        public DefaultChainEventUnSubcribe(Type chainEventType,Action onUnSub)
-        {
-            mChainEventType = chainEventType;
-            mOnUnSub = onUnSub;
-        }
-
-        public Type GetChainEventType()
-        {
-            return mChainEventType;
-        }
-
-        public void UnSubscribe()
-        {
-            mOnUnSub?.Invoke();
-            mOnUnSub = null;
-            mChainEventType = null;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultChainEventUnSubcribe.cs.meta

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

+ 0 - 160
Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultTypeEventSystem.cs

@@ -1,160 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Blue
-{
-    /// <summary>
-    /// 默认事件系统类,实现ITypeEventSystem
-    /// </summary>
-    public class DefaultTypeEventSystem : ITypeEventSystem
-    {
-        private Dictionary<Type, ISubscription> eventSubscriptionPool = new Dictionary<Type, ISubscription>(128);
-        private Dictionary<Type, IChainEventSubscription> chainEventPool = new Dictionary<Type, IChainEventSubscription>(8);
-        public IUnSubscribe SubscribeEvent<T>(Action<T> onEvent) where T : IEvent
-        {
-            Type t = typeof(T);
-            ISubscription subscription;
-            var adapter = new EventToActionAdapter(onEvent.GetHashCode(),(ievent) => { onEvent?.Invoke((T)ievent); });
-            if (!eventSubscriptionPool.TryGetValue(t, out subscription))
-            {
-                subscription = new TypeEventSubscription(t);
-                eventSubscriptionPool.Add(t, subscription);
-            }
-            return subscription.Subscribe(adapter);
-        }
-
-        public IChainEventUnSubscribe SubscribeChainEvent<T,K>(Action<K> onEvent) where T : IChainEvent where K:IEvent
-        {
-            Type chainEventType = typeof(T);
-            return SubscribeChainEvent(chainEventType,onEvent);
-        }
-        public IChainEventUnSubscribe SubscribeChainEvent<K>(Type chainEventType, Action<K> onEvent) where K : IEvent 
-        {
-            Type eventType = typeof(K);
-            IChainEventSubscription chainSubscription;
-            if (!chainEventPool.TryGetValue(chainEventType, out chainSubscription))
-            {
-                chainSubscription = new ChainEventSubscription(chainEventType);
-                chainEventPool.Add(chainEventType, chainSubscription);
-            }
-            if (chainSubscription.IsSubscribed(eventType))
-            {
-                UnSubscribeEvent(eventType, chainSubscription.GetActionHashCode(eventType));
-                chainSubscription.UnSubscribe(eventType);
-            }
-            ISubscription eventSubscription;
-            var adapter = new EventToActionAdapter(onEvent.GetHashCode(), (ievent) => { onEvent?.Invoke((K)ievent); });
-            if (!eventSubscriptionPool.TryGetValue(eventType, out eventSubscription))
-            {
-                eventSubscription = new TypeEventSubscription(eventType);
-                eventSubscriptionPool.Add(eventType, eventSubscription);
-            }
-            eventSubscription.Subscribe(adapter);
-            return chainSubscription.Subscribe(eventType, onEvent.GetHashCode(),()=> { eventSubscription.UnSubscribe(onEvent.GetHashCode()); });
-        }
-        public void TriggerEvent<T>() where T : IEvent, new()
-        {
-            TriggerEvent(new T());
-        }
-
-        public void TriggerEvent<T>(T e) where T : IEvent
-        {
-            if (eventSubscriptionPool.TryGetValue(e.GetType(), out ISubscription subscription))
-            {
-                subscription.TriggerEvent(e);
-            }
-        }
-
-        public void TriggerChainEvent<T>(params IEvent[] events) where T:IChainEvent
-        {
-            IChainEventSubscription chainSubscription;
-            Type chainEventType = typeof(T);
-            if (chainEventPool.TryGetValue(chainEventType, out chainSubscription))
-            {
-                Dictionary<Type, IEvent> eventInstanceMap = new Dictionary<Type, IEvent>(events.Length);
-                foreach (var mEvent in events)
-                {
-                    eventInstanceMap.TryAdd(mEvent.GetType(),mEvent);
-                }
-                List<Type> chainEventTypeList=chainSubscription.GetEventTypeList();
-                foreach (var eventType in chainEventTypeList)
-                {
-                    IEvent eventInstance;
-                    if (!eventInstanceMap.TryGetValue(eventType, out eventInstance))
-                    {
-                        eventInstance = (IEvent)Activator.CreateInstance(eventType);
-                    }
-                    TriggerEvent(eventInstance);
-                }
-            }
-        }
-        public void TriggerChainEvent<T>() where T : IChainEvent
-        {
-            IChainEventSubscription chainSubscription;
-            Type chainEventType = typeof(T);
-            if (chainEventPool.TryGetValue(chainEventType, out chainSubscription))
-            {
-                List<Type> chainEventTypeList = chainSubscription.GetEventTypeList();
-                foreach (var eventType in chainEventTypeList)
-                {
-                    TriggerEvent((IEvent)Activator.CreateInstance(eventType));
-                }
-            }
-        }
-
-        public void UnSubscribeEvent<T>(Action<T> onEvent) where T : IEvent
-        {
-            Type t = typeof(T);
-            UnSubscribeEvent(t, onEvent.GetHashCode());
-        }
-        public void UnSubscribeChainEvent<T>() where T:IChainEvent
-        {
-            Type chainEventType = typeof(T);
-            UnSubscribeChainEvent(chainEventType);
-        }
-        public void UnSubscribeChainEvent(Type chainEventType)
-        {
-            IChainEventSubscription chainSubscription;
-            if (chainEventPool.TryGetValue(chainEventType, out chainSubscription))
-            {
-                List<Type> chainEventTypeList= chainSubscription.GetEventTypeList();
-                foreach (var eventType in chainEventTypeList)
-                {
-                    UnSubscribeEvent(eventType,chainSubscription.GetActionHashCode(eventType));
-                    chainSubscription.UnSubscribe(eventType);
-                }
-                chainEventPool.Remove(chainEventType);
-            }
-        }
-        public void UnSubscribeEventFromChainEvent<T, K>() where T : IChainEvent where K : IEvent
-        {
-            IChainEventSubscription chainSubscription;
-            Type chainEventType = typeof(T);
-            if (chainEventPool.TryGetValue(chainEventType, out chainSubscription))
-            {
-                Type eventType = typeof(K);
-                if (chainSubscription.UnSubscribe(eventType))
-                {
-                    UnSubscribeEvent(eventType,chainSubscription.GetActionHashCode(eventType));
-                }
-                if (chainSubscription.SubscribeCount == 0)
-                {
-                    chainEventPool.Remove(chainEventType);
-                }
-            }
-        }
-        private bool UnSubscribeEvent(Type eventType, int hash)
-        {
-            bool result = false;
-            if (eventSubscriptionPool.TryGetValue(eventType, out ISubscription subscription))
-            {
-                result=subscription.UnSubscribe(hash);
-                if (subscription.SubscribeCount <= 0)
-                {
-                    eventSubscriptionPool.Remove(eventType);
-                }
-            }
-            return result;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/DefaultTypeEventSystem.cs.meta

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

+ 0 - 49
Assets/Scripts/Blue/0.FrameworkDesign/Event/EventToActionAdapter.cs

@@ -1,49 +0,0 @@
-using System;
-namespace Blue
-{
-    /// <summary>
-    /// Event Action 适配
-    /// </summary>
-    public struct EventToActionAdapter
-    {
-        private Action<IEvent> mAdapterAction;
-        private int mHashCode;
-
-        /// <summary>
-        /// 初始化 hashCode ,Action
-        /// </summary>
-        /// <param name="hashCode"></param>
-        /// <param name="adapterAction"></param>
-        public EventToActionAdapter(int hashCode,Action<IEvent> adapterAction)
-        {
-            mHashCode = hashCode;
-            mAdapterAction = adapterAction;
-        }
-
-        /// <summary>
-        /// 获取适配的 Action
-        /// </summary>
-        /// <returns></returns>
-        public Action<IEvent> GetAdapterAction()
-        {
-            return mAdapterAction;
-        }
-
-        /// <summary>
-        /// 获取 Action 的 HashCode
-        /// </summary>
-        /// <returns></returns>
-        public int GetActionHashCode()
-        {
-            return mHashCode;
-        }
-
-        /// <summary>
-        /// 清除 Action
-        /// </summary>
-        public void Clear()
-        {
-            mAdapterAction = null;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/EventToActionAdapter.cs.meta

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

+ 0 - 8
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEvent.cs

@@ -1,8 +0,0 @@
-using System;
-namespace Blue
-{
-    public interface IChainEvent : IEvent
-    {
-        //IChainEvent NextEvent<T>(Action<T> onEvent) where T : IEvent;
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEvent.cs.meta

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

+ 0 - 18
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventSubscription.cs

@@ -1,18 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-namespace Blue
-{
-	/// <summary>
-	/// 订阅链事件的接口
-	/// </summary>
-	public interface IChainEventSubscription
-	{
-		int SubscribeCount { get; }
-		IChainEventUnSubscribe Subscribe(Type eventType, int actionHashCode, Action onOnSubscribe);
-		List<Type> GetEventTypeList();
-		bool IsSubscribed(Type eventType);
-		int GetActionHashCode(Type eventType);
-		bool UnSubscribe(Type eventType);
-	}
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventSubscription.cs.meta

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

+ 0 - 31
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubcribeExtension.cs

@@ -1,31 +0,0 @@
-using System;
-using UnityEngine;
-namespace Blue
-{
-    public static class IChainEventUnSubcribeExtension
-    {
-        private static ITypeEventSystem _typeEventSystem;
-        public static void SetEventSystem(ITypeEventSystem typeEventSystem) 
-        {
-            _typeEventSystem = typeEventSystem;
-        }
-        public static void UnSubscribeAllEventOnGameobjectDestroyed(this IChainEventUnSubscribe unSubscribe, GameObject gameObject)
-        {
-            var trigger = gameObject.GetComponent<UnSubscribeChainEventOnDestroyTrigger>();
-            if (!trigger)
-            {
-                trigger = gameObject.AddComponent<UnSubscribeChainEventOnDestroyTrigger>();
-            }
-            trigger.AddUnSubscribe(unSubscribe);
-        }
-        public static IChainEventUnSubscribe NextEvent<T>(this IChainEventUnSubscribe self,Action<T> onEvent) where T:IEvent
-        {
-            return _typeEventSystem.SubscribeChainEvent(self.GetChainEventType(),onEvent);
-        }
-
-        public static void UnSubscribeAllEventsOnChain(this IChainEventUnSubscribe self) 
-        {
-            _typeEventSystem.UnSubscribeChainEvent(self.GetChainEventType());
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubcribeExtension.cs.meta

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

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubscribe.cs

@@ -1,11 +0,0 @@
-using System;
-namespace Blue
-{
-    /// <summary>
-    /// 链事件取消订阅事件的接口
-    /// </summary>
-    public interface IChainEventUnSubscribe:IUnSubscribe
-    {
-        Type GetChainEventType();
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IChainEventUnSubscribe.cs.meta

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

+ 0 - 6
Assets/Scripts/Blue/0.FrameworkDesign/Event/IEvent.cs

@@ -1,6 +0,0 @@
-namespace Blue
-{
-    public interface IEvent
-    {
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IEvent.cs.meta

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

+ 0 - 13
Assets/Scripts/Blue/0.FrameworkDesign/Event/ISubscription.cs

@@ -1,13 +0,0 @@
-namespace Blue
-{
-    /// <summary>
-    /// 订阅事件的接口
-    /// </summary>
-    public interface ISubscription
-    {
-        int SubscribeCount { get; }
-        IUnSubscribe Subscribe(EventToActionAdapter adapter);
-        bool UnSubscribe(int hashCode);
-        void TriggerEvent(IEvent e);
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/ISubscription.cs.meta

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

+ 0 - 28
Assets/Scripts/Blue/0.FrameworkDesign/Event/ITypeEventSystem.cs

@@ -1,28 +0,0 @@
-using System;
-namespace Blue
-{
-    /// <summary>
-    /// 事件系统接口
-    /// ① 注册事件、注册链事件
-    /// ② 订阅事件、订阅链事件
-    /// ③ 取消订阅事件、取消订阅链事件
-    /// ④ 取消订阅链事件中的事件
-    /// </summary>
-    public interface ITypeEventSystem
-    {
-        void TriggerEvent<T>() where T : IEvent, new();
-        void TriggerEvent<T>(T e) where T : IEvent;
-        void TriggerChainEvent<T>(params IEvent[] events) where T : IChainEvent;
-        void TriggerChainEvent<T>() where T : IChainEvent;
-
-        IUnSubscribe SubscribeEvent<T>(Action<T> onEvent) where T : IEvent;
-        IChainEventUnSubscribe SubscribeChainEvent<T, K>(Action<K> onEvent) where T : IChainEvent where K : IEvent;
-        IChainEventUnSubscribe SubscribeChainEvent<K>(Type chainEventType,Action<K> onEvent) where K : IEvent;
-
-        void UnSubscribeEvent<T>(Action<T> onEvent) where T : IEvent;
-        void UnSubscribeChainEvent<T>() where T : IChainEvent;
-        void UnSubscribeChainEvent(Type chainEventType);
-
-        void UnSubscribeEventFromChainEvent<T, K>() where T : IChainEvent where K : IEvent;
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/ITypeEventSystem.cs.meta

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

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribe.cs

@@ -1,11 +0,0 @@
-using System;
-namespace Blue
-{
-    /// <summary>
-    /// 取消订阅事件的接口
-    /// </summary>
-    public interface IUnSubscribe
-    {
-        void UnSubscribe();
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribe.cs.meta

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

+ 0 - 26
Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribeExtension.cs

@@ -1,26 +0,0 @@
-using UnityEngine;
-namespace Blue
-{
-    public static class IUnSubscribeExtension
-    {
-        public static void UnSubScribeWhenGameObjectDestroyed(this  IUnSubscribe unSubscribe,GameObject gameObject) 
-        {
-            var trigger= gameObject.GetComponent<UnSubscribeOnDestroyTrigger>();
-            if (!trigger) 
-            {
-                trigger = gameObject.AddComponent<UnSubscribeOnDestroyTrigger>();
-            }
-            trigger.AddUnSubscribe(unSubscribe);
-        }
-        public static void UnSubScribeWhenGameObjectDisabled(this IUnSubscribe unSubscribe, GameObject gameObject)
-        {
-            var trigger = gameObject.GetComponent<UnSubscribeOnDisableTrigger>();
-            if (!trigger)
-            {
-                trigger = gameObject.AddComponent<UnSubscribeOnDisableTrigger>();
-            }
-            trigger.AddUnSubscribe(unSubscribe);
-        }
-
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/IUnSubscribeExtension.cs.meta

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

+ 0 - 49
Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSubscription.cs

@@ -1,49 +0,0 @@
-using System;
-using System.Collections.Generic;
-namespace Blue
-{
-    public class TypeEventSubscription : ISubscription
-    {
-        private Action<IEvent> mOnEvent;
-        private int subscribeCount;
-        private Type mEventType;
-        private Dictionary<int, EventToActionAdapter> adapterPool = new Dictionary<int, EventToActionAdapter>();
-        public TypeEventSubscription(Type eventType) 
-        {
-            mEventType = eventType;
-        }
-        public int SubscribeCount { get => subscribeCount;}
-        public IUnSubscribe Subscribe(EventToActionAdapter adapter)
-        {
-            try
-            {
-                adapterPool.Add(adapter.GetActionHashCode(), adapter);
-                mOnEvent += adapter.GetAdapterAction();
-                subscribeCount++;
-                return new TypeEventSystemUnSubscribe(() => { UnSubscribe(adapter.GetActionHashCode()); });
-            }
-            catch (ArgumentException)
-            {
-                //LogUtil.LogError("Event subscription duplicated on "+mEventType+",please make sure you have unsubscribe it before re-subscribe!");
-                throw;
-            }
-        }
-        public void TriggerEvent(IEvent e)
-        {
-            mOnEvent?.Invoke(e);
-        }
-
-        public bool UnSubscribe(int hashCode)
-        {
-            if (adapterPool.TryGetValue(hashCode, out var adapter)) 
-            {
-                mOnEvent -= adapter.GetAdapterAction();
-                subscribeCount--;
-                adapter.Clear();
-                adapterPool.Remove(hashCode);
-                return true;
-            }
-            return false;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSubscription.cs.meta

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

+ 0 - 19
Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSystemUnSubscribe.cs

@@ -1,19 +0,0 @@
-using System;
-
-namespace Blue
-{
-
-    public struct TypeEventSystemUnSubscribe : IUnSubscribe
-    {
-        private Action mOnUnSubscribe;
-        public TypeEventSystemUnSubscribe(Action onUnSubscribe) 
-        {
-            mOnUnSubscribe = onUnSubscribe;
-        }
-        public void UnSubscribe() 
-        {
-            mOnUnSubscribe?.Invoke();
-            mOnUnSubscribe = null;
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/TypeEventSystemUnSubscribe.cs.meta

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

+ 0 - 22
Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeChainEventOnDestroyTrigger.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using UnityEngine;
-namespace Blue
-{
-    public class UnSubscribeChainEventOnDestroyTrigger : MonoBehaviour
-    {
-        private HashSet<IChainEventUnSubscribe> unSubscribes = new HashSet<IChainEventUnSubscribe>();
-
-        public void AddUnSubscribe(IChainEventUnSubscribe unSubscribe)
-        {
-            unSubscribes.Add(unSubscribe);
-        }
-        private void OnDestroy()
-        {
-            foreach (var item in unSubscribes)
-            {
-                item.UnSubscribeAllEventsOnChain();
-            }
-            unSubscribes.Clear();
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeChainEventOnDestroyTrigger.cs.meta

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

+ 0 - 22
Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDestroyTrigger.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using UnityEngine;
-namespace Blue
-{
-    public class UnSubscribeOnDestroyTrigger : MonoBehaviour
-    {
-        private HashSet<IUnSubscribe> unSubscribes = new HashSet<IUnSubscribe>();
-
-        public void AddUnSubscribe(IUnSubscribe unSubscribe) 
-        {
-            unSubscribes.Add(unSubscribe);
-        }
-        private void OnDestroy()
-        {
-            foreach (var item in unSubscribes)
-            {
-                item.UnSubscribe();
-            }
-            unSubscribes.Clear();
-        }
-    }
-}

+ 0 - 11
Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDestroyTrigger.cs.meta

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

+ 0 - 22
Assets/Scripts/Blue/0.FrameworkDesign/Event/UnSubscribeOnDisableTrigger.cs

@@ -1,22 +0,0 @@
-using System.Collections.Generic;
-using UnityEngine;
-namespace Blue
-{
-    public class UnSubscribeOnDisableTrigger : MonoBehaviour
-    {
-        private HashSet<IUnSubscribe> unSubscribes = new HashSet<IUnSubscribe>();
-
-        public void AddUnSubscribe(IUnSubscribe unSubscribe) 
-        {
-            unSubscribes.Add(unSubscribe);
-        }
-        private void OnDisable()
-        {
-            foreach (var item in unSubscribes)
-            {
-                item.UnSubscribe();
-            }
-            unSubscribes.Clear();
-        }
-    }
-}

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