diff --git a/Assets/Art/Sprites/书籍优化/Back.prefab b/Assets/Art/Sprites/书籍优化/Back.prefab
index 4814dbb..e594321 100644
--- a/Assets/Art/Sprites/书籍优化/Back.prefab
+++ b/Assets/Art/Sprites/书籍优化/Back.prefab
@@ -31,6 +31,7 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
+ - {fileID: 7215395422902433694}
- {fileID: 522482546413498521}
m_Father: {fileID: 1355712093182564075}
m_RootOrder: 0
@@ -102,7 +103,6 @@ GameObject:
- component: {fileID: 522482546413498521}
- component: {fileID: 579047698137250596}
- component: {fileID: 5000131054849129790}
- - component: {fileID: 2008703339932656136}
m_Layer: 5
m_Name: bookText
m_TagString: Untagged
@@ -123,12 +123,12 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 8327629265958355051}
- m_RootOrder: 0
+ m_RootOrder: 1
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: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 30, y: -84}
+ m_SizeDelta: {x: -29.999998, y: 830}
m_Pivot: {x: 0, y: 1}
--- !u!222 &579047698137250596
CanvasRenderer:
@@ -160,7 +160,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: be667217d3d3a5447a0231196de062c0, type: 3}
- m_FontSize: 28
+ m_FontSize: 25
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
@@ -172,20 +172,6 @@ MonoBehaviour:
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text:
---- !u!114 &2008703339932656136
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 698830716538477079}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &1108802075530485256
GameObject:
m_ObjectHideFlags: 0
@@ -219,7 +205,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1355712093182564075}
- - {fileID: 4426448496689443081}
+ - {fileID: 6327963864837876568}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -329,7 +315,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0.000015258789, y: 10}
+ m_AnchoredPosition: {x: 0.000030517578, y: 10}
m_SizeDelta: {x: -40.000015, y: -60}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4538426996848575638
@@ -384,7 +370,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Content: {fileID: 522482546413498521}
m_Horizontal: 0
- m_Vertical: 1
+ m_Vertical: 0
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
@@ -425,18 +411,18 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3532340770849631787}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 898674588671415498}
- m_RootOrder: 1
+ m_Father: {fileID: 6327963864837876568}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0}
- m_AnchorMax: {x: 0.5, y: 0}
- m_AnchoredPosition: {x: 0, y: 20}
- m_SizeDelta: {x: 40, y: 40}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 23.4512, y: 0}
+ m_SizeDelta: {x: 61.0977, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1119868347875695608
CanvasRenderer:
@@ -459,7 +445,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0, g: 0, b: 0, a: 1}
+ 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
@@ -473,13 +459,170 @@ MonoBehaviour:
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 40
- m_Alignment: 0
+ m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: 1
+--- !u!1 &5263353154652506651
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7215395422902433694}
+ - component: {fileID: 1761202182111978314}
+ - component: {fileID: 6874164926691447841}
+ m_Layer: 5
+ m_Name: bookTopText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7215395422902433694
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263353154652506651}
+ 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: 8327629265958355051}
+ 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: 0}
+ m_SizeDelta: {x: 0, y: 70}
+ m_Pivot: {x: 0, y: 1}
+--- !u!222 &1761202182111978314
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263353154652506651}
+ m_CullTransparentMesh: 1
+--- !u!114 &6874164926691447841
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 5263353154652506651}
+ 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, g: 0, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: be667217d3d3a5447a0231196de062c0, type: 3}
+ m_FontSize: 28
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 2
+ m_MaxSize: 40
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "\u4E00\u3001\u5BFC\u5C3F\u672F\u7684\u9002\u5E94\u75C7\u4E0E\u7981\u5FCC\u75C7\n"
+--- !u!1 &6805618407965812769
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 6327963864837876568}
+ - component: {fileID: 7375553302854610476}
+ - component: {fileID: 1304429593626385277}
+ m_Layer: 5
+ m_Name: Image
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &6327963864837876568
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6805618407965812769}
+ 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: 4426448496689443081}
+ m_Father: {fileID: 898674588671415498}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 101, y: 84}
+ m_SizeDelta: {x: 72, y: 32}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &7375553302854610476
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6805618407965812769}
+ m_CullTransparentMesh: 1
+--- !u!114 &1304429593626385277
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 6805618407965812769}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: 18293cc9772c80b4fa1c3443c1305d7d, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &7249459030306176569
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/Art/Sprites/书籍优化/Front.prefab b/Assets/Art/Sprites/书籍优化/Front.prefab
index c906e8a..b27d598 100644
--- a/Assets/Art/Sprites/书籍优化/Front.prefab
+++ b/Assets/Art/Sprites/书籍优化/Front.prefab
@@ -33,7 +33,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 3906151173181146887}
- - {fileID: 4500839131076430979}
+ - {fileID: 7015576608080402352}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -181,6 +181,86 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &844659690061720241
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 358274079551938198}
+ - component: {fileID: 5095144190117216544}
+ - component: {fileID: 661162673703820463}
+ m_Layer: 5
+ m_Name: bookTopText
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &358274079551938198
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844659690061720241}
+ 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: 5712826368191145630}
+ 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: 0}
+ m_SizeDelta: {x: 0, y: 70}
+ m_Pivot: {x: 0, y: 1}
+--- !u!222 &5095144190117216544
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844659690061720241}
+ m_CullTransparentMesh: 1
+--- !u!114 &661162673703820463
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 844659690061720241}
+ 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, g: 0, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: be667217d3d3a5447a0231196de062c0, type: 3}
+ m_FontSize: 28
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 2
+ m_MaxSize: 40
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "\u4E00\u3001\u5BFC\u5C3F\u672F\u7684\u9002\u5E94\u75C7\u4E0E\u7981\u5FCC\u75C7\n"
--- !u!1 &1171872099361499748
GameObject:
m_ObjectHideFlags: 0
@@ -192,7 +272,6 @@ GameObject:
- component: {fileID: 3635586649588463893}
- component: {fileID: 3272867475693095438}
- component: {fileID: 8037391440435932342}
- - component: {fileID: 2878836543288473266}
m_Layer: 5
m_Name: bookText
m_TagString: Untagged
@@ -213,12 +292,12 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 5712826368191145630}
- m_RootOrder: 0
+ m_RootOrder: 1
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: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 30, y: -84}
+ m_SizeDelta: {x: -30, y: 830}
m_Pivot: {x: 0, y: 1}
--- !u!222 &3272867475693095438
CanvasRenderer:
@@ -250,7 +329,7 @@ MonoBehaviour:
m_Calls: []
m_FontData:
m_Font: {fileID: 12800000, guid: be667217d3d3a5447a0231196de062c0, type: 3}
- m_FontSize: 28
+ m_FontSize: 25
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 2
@@ -262,20 +341,6 @@ MonoBehaviour:
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text:
---- !u!114 &2878836543288473266
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1171872099361499748}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_HorizontalFit: 0
- m_VerticalFit: 2
--- !u!1 &2476703880615261714
GameObject:
m_ObjectHideFlags: 0
@@ -307,6 +372,7 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
+ - {fileID: 358274079551938198}
- {fileID: 3635586649588463893}
m_Father: {fileID: 3906151173181146887}
m_RootOrder: 0
@@ -624,7 +690,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
m_Content: {fileID: 3635586649588463893}
m_Horizontal: 0
- m_Vertical: 1
+ m_Vertical: 0
m_MovementType: 1
m_Elasticity: 0.1
m_Inertia: 1
@@ -640,6 +706,83 @@ MonoBehaviour:
m_OnValueChanged:
m_PersistentCalls:
m_Calls: []
+--- !u!1 &8842363041953792456
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 7015576608080402352}
+ - component: {fileID: 775016411365987648}
+ - component: {fileID: 7305091546734591109}
+ m_Layer: 5
+ m_Name: Image
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &7015576608080402352
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8842363041953792456}
+ 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: 4500839131076430979}
+ m_Father: {fileID: 152011631505034571}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -94, y: 68}
+ m_SizeDelta: {x: 72, y: 32}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &775016411365987648
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8842363041953792456}
+ m_CullTransparentMesh: 1
+--- !u!114 &7305091546734591109
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 8842363041953792456}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: ad2563472913bc0418b92b41b1645c52, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
--- !u!1 &9019310647496789194
GameObject:
m_ObjectHideFlags: 0
@@ -665,18 +808,18 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9019310647496789194}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
- m_Father: {fileID: 152011631505034571}
- m_RootOrder: 1
+ m_Father: {fileID: 7015576608080402352}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0}
- m_AnchorMax: {x: 0.5, y: 0}
- m_AnchoredPosition: {x: 0, y: 20}
- m_SizeDelta: {x: 40, y: 40}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: -24.528809, y: 0}
+ m_SizeDelta: {x: 58.9424, y: 40}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8884188765733387939
CanvasRenderer:
@@ -699,7 +842,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0, g: 0, b: 0, a: 1}
+ 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
@@ -713,7 +856,7 @@ MonoBehaviour:
m_BestFit: 0
m_MinSize: 2
m_MaxSize: 40
- m_Alignment: 0
+ m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
diff --git a/Assets/Art/Sprites/书籍优化/back.png b/Assets/Art/Sprites/书籍优化/back.png
new file mode 100644
index 0000000..68fbdbc
Binary files /dev/null and b/Assets/Art/Sprites/书籍优化/back.png differ
diff --git a/Assets/Art/Sprites/书籍优化/back.png.meta b/Assets/Art/Sprites/书籍优化/back.png.meta
new file mode 100644
index 0000000..7a83ddf
--- /dev/null
+++ b/Assets/Art/Sprites/书籍优化/back.png.meta
@@ -0,0 +1,146 @@
+fileFormatVersion: 2
+guid: 18293cc9772c80b4fa1c3443c1305d7d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ 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
+ - serializedVersion: 3
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Art/Sprites/书籍优化/frontImg.png b/Assets/Art/Sprites/书籍优化/frontImg.png
new file mode 100644
index 0000000..88fbe4b
Binary files /dev/null and b/Assets/Art/Sprites/书籍优化/frontImg.png differ
diff --git a/Assets/Art/Sprites/书籍优化/frontImg.png.meta b/Assets/Art/Sprites/书籍优化/frontImg.png.meta
new file mode 100644
index 0000000..fa2b889
--- /dev/null
+++ b/Assets/Art/Sprites/书籍优化/frontImg.png.meta
@@ -0,0 +1,146 @@
+fileFormatVersion: 2
+guid: ad2563472913bc0418b92b41b1645c52
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 11
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMasterTextureLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ 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
+ - serializedVersion: 3
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ spritePackingTag:
+ pSDRemoveMatte: 0
+ pSDShowRemoveMatteOption: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/daoNiaoShu/ExcelData/Excel/BookPanelData.xlsx b/Assets/Resources/daoNiaoShu/ExcelData/Excel/BookPanelData.xlsx
index f0240a4..3675c03 100644
Binary files a/Assets/Resources/daoNiaoShu/ExcelData/Excel/BookPanelData.xlsx and b/Assets/Resources/daoNiaoShu/ExcelData/Excel/BookPanelData.xlsx differ
diff --git a/Assets/Resources/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json b/Assets/Resources/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
index 09d2940..81e1068 100644
--- a/Assets/Resources/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
+++ b/Assets/Resources/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
@@ -1 +1 @@
-[{"id":1,"group":"1","txt":"公犬导尿术
一、导尿术的适应症与禁忌症
1.适应症
1)急性尿潴留。
2)需采集无菌尿液样本或进行膀胱灌注治疗。
3)尿道梗阻解除后维持排尿通路。
2.禁忌症
1)尿道破裂或严重损伤(需手术修复)。
2)泌尿道急性感染未控制(避免逆行感染扩散)。
3)严重凝血功能障碍。"},{"id":2,"group":"1","txt":"二、公犬泌尿系统解剖要点
1.尿道结构
1)公犬尿道分为前列腺前部、前列腺部和阴茎部,导尿管需通过阴茎部尿道(长约15-20cm)进入膀胱。
2)尿道口位于阴茎龟头顶端,被包皮覆盖,操作需向后推包皮暴露。
2.体表定位标志
1)坐骨结节为导尿管体外测量的终点(尿道口至坐骨结节距离≈尿道长度)。
2)膀胱充盈时可在腹后部触及球形隆起(叩诊浊音)。"},{"id":3,"group":"1","txt":"三、术前准备工作
1.物品准备
1)核心器械:型号适合的硅胶导尿管、无菌外科手套、20ml注射器、0.9%生理盐水、利多卡因凝胶、氯己定棉球、无菌持物镊等。
2)辅助物品:电动剃毛器(备皮范围直径5-10cm)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。
2.患犬准备
1)镇静镇痛:静脉注射右美托咪定(5μg/kg)+布托啡诺(0.3mg/kg),提供深度镇静与镇痛。
2)体位:右侧卧位,后肢外展固定,充分暴露会阴部。
3)备皮:剃除包皮口周围长毛,清洁皮肤碎屑。
3.术者准备
七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":4,"group":"1","txt":"四、规范操作流程
1.清洁消毒
1)向后推包皮暴露龟头,用20ml生理盐水冲洗包皮腔污物。
2)氯己定棉球消毒(2次):
(1)第1次:由内向外环形清洁包皮口及周围皮肤(半径5-10cm)。
(2)第2次:重点消毒尿道口及龟头表面。
2.尿道麻醉:食指涂抹利多卡因凝胶,旋转涂抹龟头及尿道口,等待2-3分钟起效。
3.导尿管测量与插入
1)测量:导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度(体外预估法)。
2)插管
(1)导尿管外涂抗生素软膏润滑。
(2)助手向后推包皮暴露阴茎2-5cm,术者持导管沿尿道走向缓慢插入(遇阻力勿强行推进)。
(3)成功标志:尿液流入集尿袋,膀胱逐渐塌陷。
4.导尿后处理
1)尿液引流完毕后,缓慢拔出导尿管。
2)脱手套,按医疗废物分类处理物品。"},{"id":5,"group":"1","txt":"五、注意事项与并发症预防
1.无菌操作
1)手套破损需立即更换。
2)消毒棉球限单次单向使用。
2.操作技巧
1)尿道痉挛时暂停操作,追加利多卡因凝胶(禁用暴力插管)。
2)导尿管插入深度不超过坐骨结节标记点(避免膀胱壁损伤)。
3)并发症应对
(1)尿道损伤:立即停止操作,评估是否需膀胱穿刺或手术。
(2)逆行感染:严格无菌操作,术后监测排尿状态及体温。"},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""}]
+[{"id":1,"group":"1","topTxt":"一、导尿术的适应症与禁忌症","txt":"1.适应症
1)急性尿潴留。
2)需采集无菌尿液样本或进行膀胱灌注治疗。
3)尿道梗阻解除后维持排尿通路。
2.禁忌症
1)尿道破裂或严重损伤(需手术修复)。
2)泌尿道急性感染未控制(避免逆行感染扩散)。
3)严重凝血功能障碍。"},{"id":2,"group":"1","topTxt":"二、公犬泌尿系统解剖要点","txt":"1.尿道结构
1)公犬尿道分为前列腺前部、前列腺部和阴茎部,导尿管需通过阴茎部尿道(长约15-20cm)进入膀胱。
2)尿道口位于阴茎龟头顶端,被包皮覆盖,操作需向后推包皮暴露。
2.体表定位标志
1)坐骨结节为导尿管体外测量的终点(尿道口至坐骨结节距离≈尿道长度)。
2)膀胱充盈时可在腹后部触及球形隆起(叩诊浊音)。"},{"id":3,"group":"1","topTxt":"三、术前准备工作","txt":"1.物品准备
1)核心器械:型号适合的硅胶导尿管、无菌外科手套、20ml注射器、0.9%生理盐水、利多卡因凝胶、氯己定棉球、无菌持物镊等。
2)辅助物品:电动剃毛器(备皮范围直径5-10cm)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。
2.患犬准备
1)镇静镇痛:静脉注射右美托咪定(5μg/kg)+布托啡诺(0.3mg/kg),提供深度镇静与镇痛。"},{"id":4,"group":"1","topTxt":"","txt":"
2)体位:右侧卧位,后肢外展固定,充分暴露会阴部。
3)备皮:剃除包皮口周围长毛,清洁皮肤碎屑。
3.术者准备
七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":5,"group":"1","topTxt":"四、规范操作流程","txt":"1.清洁消毒
1)向后推包皮暴露龟头,用20ml生理盐水冲洗包皮腔污物。
2)氯己定棉球消毒(2次):
(1)第1次:由内向外环形清洁包皮口及周围皮肤(半径5-10cm)。
(2)第2次:重点消毒尿道口及龟头表面。
2.尿道麻醉:食指涂抹利多卡因凝胶,旋转涂抹龟头及尿道口,等待2-3分钟起效。
3.导尿管测量与插入
1)测量:导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度(体外预估法)。"},{"id":6,"group":"1","topTxt":"","txt":"
2)插管
(1)导尿管外涂抗生素软膏润滑。
(2)助手向后推包皮暴露阴茎2-5cm,术者持导管沿尿道走向缓慢插入(遇阻力勿强行推进)。
(3)成功标志:尿液流入集尿袋,膀胱逐渐塌陷。
4.导尿后处理
1)尿液引流完毕后,缓慢拔出导尿管。
2)脱手套,按医疗废物分类处理物品。"},{"id":7,"group":"1","topTxt":"五、注意事项与并发症预防","txt":"1.无菌操作
1)手套破损需立即更换。
2)消毒棉球限单次单向使用。
2.操作技巧
1)尿道痉挛时暂停操作,追加利多卡因凝胶(禁用暴力插管)。
2)导尿管插入深度不超过坐骨结节标记点(避免膀胱壁损伤)。
3)并发症应对
(1)尿道损伤:立即停止操作,评估是否需膀胱穿刺或手术。
(2)逆行感染:严格无菌操作,术后监测排尿状态及体温。"},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""}]
diff --git a/Assets/SenSorSystem/ZhuSheQi_10SenSor.cs b/Assets/SenSorSystem/ZhuSheQi_10SenSor.cs
index 845c522..27e84dd 100644
--- a/Assets/SenSorSystem/ZhuSheQi_10SenSor.cs
+++ b/Assets/SenSorSystem/ZhuSheQi_10SenSor.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
@@ -22,7 +23,7 @@ public class ZhuSheQi_10SenSor : Sensor
transform.parent.GetComponent().SendFunction("+++");
}
- public override void ReceiveData(string datas)
+ public override void ReceiveData(string datas, SerialPort sp = null)
{
base.ReceiveData(datas);
if (!datas.Split('%')[0].Split("ID:")[1].Split(',')[0].Equals("ZSQ10")) return;
diff --git a/Assets/SenSorSystem/ZhuSheQi_20SenSor.cs b/Assets/SenSorSystem/ZhuSheQi_20SenSor.cs
index 6195b1c..3ed6135 100644
--- a/Assets/SenSorSystem/ZhuSheQi_20SenSor.cs
+++ b/Assets/SenSorSystem/ZhuSheQi_20SenSor.cs
@@ -2,6 +2,7 @@ using DongWuYiXue.DaoNiaoShu;
using System;
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
@@ -27,7 +28,7 @@ public class ZhuSheQi_20SenSor : Sensor
GameManager.Instance.senSor.SendFunction("+++");
}
- public override void ReceiveData(string datas)
+ public override void ReceiveData(string datas, SerialPort sp = null)
{
base.ReceiveData(datas);
if (!datas.Split('%')[0].Split("ID:")[1].Split(',')[0].Equals("ZSQ20"))
diff --git a/Assets/SenSorSystem/ZhuSheQi_50SenSor.cs b/Assets/SenSorSystem/ZhuSheQi_50SenSor.cs
index 7e7adaf..3c71239 100644
--- a/Assets/SenSorSystem/ZhuSheQi_50SenSor.cs
+++ b/Assets/SenSorSystem/ZhuSheQi_50SenSor.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
@@ -24,7 +25,7 @@ public class ZhuSheQi_50SenSor : Sensor
transform.parent.GetComponent().SendFunction("+++");
}
- public override void ReceiveData(string datas)
+ public override void ReceiveData(string datas, SerialPort sp = null)
{
base.ReceiveData(datas);
if (!datas.Split('%')[0].Split("ID:")[1].Split(',')[0].Equals("ZSQ50")) return;
@@ -54,7 +55,7 @@ public class ZhuSheQi_50SenSor : Sensor
public override void Display(string datas)
{
base.Display(datas);
-
+
}
}
diff --git a/Assets/SenSorSystem/ZhuSheQi_5SenSor.cs b/Assets/SenSorSystem/ZhuSheQi_5SenSor.cs
index 49163e1..cbfdb59 100644
--- a/Assets/SenSorSystem/ZhuSheQi_5SenSor.cs
+++ b/Assets/SenSorSystem/ZhuSheQi_5SenSor.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
using ZXKFramework;
@@ -24,14 +25,14 @@ public class ZhuSheQi_5SenSor : Sensor
transform.parent.GetComponent().SendFunction("+++");
}
- public override void ReceiveData(string datas)
+ public override void ReceiveData(string datas, SerialPort sp = null)
{
base.ReceiveData(datas);
if (!datas.Split('%')[0].Split("ID:")[1].Split(',')[0].Equals("ZSQ5")) return;
//this.Error(datas);
//progressValue = ((Convert.ToInt32(datas.Split("%")[0].Split("LEVEL:")[1]))-3) / 7.0f;
- progressValue = ((Convert.ToInt32(datas.Split("%")[0].Split("LEVEL:")[1]))-3) / 6.0f;
+ progressValue = ((Convert.ToInt32(datas.Split("%")[0].Split("LEVEL:")[1])) - 3) / 6.0f;
//this.Error($"ǰ5mlעĽΪ{progressValue}");
}
diff --git a/Assets/SensorModule/Scripts/Sensor/Base/Sensor.cs b/Assets/SensorModule/Scripts/Sensor/Base/Sensor.cs
index c0e9bce..9740c3f 100644
--- a/Assets/SensorModule/Scripts/Sensor/Base/Sensor.cs
+++ b/Assets/SensorModule/Scripts/Sensor/Base/Sensor.cs
@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
///
///
@@ -20,7 +21,11 @@ public abstract class Sensor : MonoBehaviour
if (!gameObject.activeSelf) return;
Display(datas);
}
-
+ public virtual void ReceiveData(string datas, SerialPort sp = null)
+ {
+ if (!gameObject.activeSelf) return;
+ Display(datas);
+ }
public virtual void Display(string datas)
{
diff --git a/Assets/SensorModule/Scripts/Sensor/导尿术_狗/DaoNiao_Sensor.cs b/Assets/SensorModule/Scripts/Sensor/导尿术_狗/DaoNiao_Sensor.cs
index d8bc6eb..ac9504b 100644
--- a/Assets/SensorModule/Scripts/Sensor/导尿术_狗/DaoNiao_Sensor.cs
+++ b/Assets/SensorModule/Scripts/Sensor/导尿术_狗/DaoNiao_Sensor.cs
@@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
+using System.IO.Ports;
using UnityEngine;
using UnityEngine.UI;
@@ -12,7 +13,7 @@ public class DaoNiao_Sensor : Sensor
public float daoNiaoDeep;
string data;
public Text txt;
- public override void ReceiveData(string datas)
+ public override void ReceiveData(string datas, SerialPort sp = null)
{
base.ReceiveData(datas);
data = datas.Split("#")[1].Split("%")[0];
diff --git a/Assets/SensorModule/Scripts/SensorManager.cs b/Assets/SensorModule/Scripts/SensorManager.cs
index c5ac85b..bfbb397 100644
--- a/Assets/SensorModule/Scripts/SensorManager.cs
+++ b/Assets/SensorModule/Scripts/SensorManager.cs
@@ -3,6 +3,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data.SqlTypes;
using System.IO.Ports;
+using System.Linq;
using System.Text;
using System.Threading;
//using UnityEditor.PackageManager.UI;
@@ -12,14 +13,215 @@ using ZXKFramework;
public class SensorManager : MonoBehaviour /*MonoSingleton*/
{
+ #region ǰ
+ //public enum DataType
+ //{
+ // ַ,
+ // ֽ,
+ //}
+ //#region ڲ,ҪĴ벨
+ //[Header("")]
+ //public string portName = "COM10";
+ //[Header("")]
+ //public int baudRate = 115200;
+ //[Header("żУ")]
+ //private Parity parity = Parity.None;
+ //[Header("λ")]
+ //private int dataBits = 8;
+ //[Header("ֹͣλ")]
+ //private StopBits stopBits = StopBits.One;
+ //SerialPort sp = null;
+ //Thread dataReceiveThread;
+ //[Header("ݸʽ")]
+ //public DataType dataType;
+ //#endregion
+ //private Dictionary allSensor = new Dictionary();
+ //StringBuilder sb = new StringBuilder();
+ //private void Start()
+ //{
+ // sp = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
+ // foreach (Sensor s in GetComponentsInChildren())
+ // {
+ // allSensor.TryAdd(s.GetType().Name, s);
+ // }
+ // switch (dataType)
+ // {
+ // case DataType.ֽ:
+ // dataReceiveThread = new Thread(new ThreadStart(DataReceiveBytesThread));
+ // break;
+ // case DataType.ַ:
+ // dataReceiveThread = new Thread(new ThreadStart(DataReceiveStrThread));
+ // break;
+ // }
+ // OpenPort();
+ //}
+ /////
+ ///// ֽ
+ /////
+ //private void DataReceiveBytesThread()
+ //{
+ // while (true)
+ // {
+ // if (sp != null && sp.IsOpen)
+ // {
+ // try
+ // {
+ // if (sp.BytesToRead > 0)
+ // {
+ // byte[] buffer = new byte[sp.BytesToRead];
+ // sp.Read(buffer, 0, sp.BytesToRead);
+ // string receivedData = Encoding.Default.GetString(buffer);
+ // //Debug.Log(receivedData);
+ // UnityMainThreadDispatcher.Instance().Enqueue(() =>
+ // {
+ // foreach (var s in allSensor)
+ // {
+ // s.Value.ReceiveData(receivedData);
+ // }
+ // });
+ // }
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("Ϣʧ");
+ // }
+ // }
+ // Thread.Sleep(20);
+ // }
+ //}
+
+ /////
+ ///// ַ
+ /////
+ //private void DataReceiveStrThread()
+ //{
+ // while (true)
+ // {
+ // if (sp != null && sp.IsOpen)
+ // {
+ // try
+ // {
+ // if (sp.BytesToRead > 0)
+ // {
+ // sb.Append(sp.ReadExisting());
+ // //this.ColorLog(GDLog.LogColorState.Blue, sp.ReadLine());
+ // UnityMainThreadDispatcher.Instance().Enqueue(() =>
+ // {
+ // foreach (var s in allSensor)
+ // {
+ // s.Value.ReceiveData(sb.ToString());
+ // }
+ // sb.Clear();
+ // });
+ // }
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("Ϣʧ");
+ // }
+ // }
+ // Thread.Sleep(20);
+ // }
+ //}
+ /////
+ ///// Ϣ
+ /////
+ /////
+ //public void SendFunction(string str)
+ //{
+ // try
+ // {
+ // byte[] dataSend = Encoding.ASCII.GetBytes(str);
+ // if (sp != null && sp.IsOpen)
+ // {
+ // if (dataSend != null && dataSend.Length > 0)
+ // {
+ // sp.Write(dataSend, 0, dataSend.Length);
+ // Debug.Log("Ϣɹ" + str);
+ // }
+ // }
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("Ϣʧܣ" + str);
+ // }
+ //}
+ ////ȡָ
+ //public T GetSensor() where T : Sensor
+ //{
+ // try
+ // {
+ // string name = typeof(T).Name;
+ // if (!allSensor.ContainsKey(name))
+ // {
+ // allSensor.TryAdd(name, GetComponentInChildren());
+ // allSensor[name].Init(this);
+ // }
+ // //Debug.Log("ȡɹ");
+ // return allSensor[name] as T;
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("ȡʧ");
+ // return null;
+ // }
+ //}
+ //#region ڿر
+ ////
+ //public void OpenPort()
+ //{
+ // try
+ // {
+ // if (!sp.IsOpen)
+ // {
+ // sp.Open();
+ // dataReceiveThread.Start();
+ // Debug.Log("ڴɹ");
+ // }
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("ڴʧ");
+ // }
+ //}
+
+ ////رմ
+ //public void ClosePort()
+ //{
+ // try
+ // {
+ // sp.Close();
+ // dataReceiveThread.Abort();
+ // Debug.Log("ڹر");
+ // }
+ // catch (Exception)
+ // {
+ // Debug.Log("ڹرʧ");
+ // }
+ //}
+ //#endregion
+
+ //#region Unity ˳
+ //private void OnApplicationQuit()
+ //{
+ // ClosePort();
+ //}
+ //private void OnDisable()
+ //{
+ // this.Log("Ϊʲôرˣ" + gameObject.name);
+ // ClosePort();
+ //}
+ //#endregion
+ #endregion
public enum DataType
{
ַ,
ֽ,
}
- #region ڲ,ҪĴ벨
- [Header("")]
- public string portName = "COM10";
+
+ #region ڲ
+ //[Header("˿മʱԶȡ")]
+ //public string portName = "COM3";
[Header("")]
public int baudRate = 115200;
[Header("żУ")]
@@ -28,38 +230,87 @@ public class SensorManager : MonoBehaviour /*MonoSingleton*/
private int dataBits = 8;
[Header("ֹͣλ")]
private StopBits stopBits = StopBits.One;
- SerialPort sp = null;
- Thread dataReceiveThread;
[Header("ݸʽ")]
public DataType dataType;
#endregion
+
private Dictionary allSensor = new Dictionary();
- StringBuilder sb = new StringBuilder();
+ public GameObject canvas;
+ List COMPorts = new List();
+ List serialPorts = new List();
+ List dataReceiveThreads = new List();
+ // ߳״̬־ÿڶӦһ־
+ private bool[] isThreadRunning;
+
private void Start()
{
- sp = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
+ COMPorts = GetAllWindowsCOMPorts().ToList();
+
+ // ʼд
+ for (int i = 0; i < COMPorts.Count; i++)
+ {
+ SerialPort sp = new SerialPort(COMPorts[i], baudRate, parity, dataBits, stopBits);
+ serialPorts.Add(sp);
+ }
+
+ // ʼ
foreach (Sensor s in GetComponentsInChildren())
{
allSensor.TryAdd(s.GetType().Name, s);
}
- switch (dataType)
+
+ // ʼ̣߳崮ң
+ isThreadRunning = new bool[COMPorts.Count]; // ʼ־λ
+ for (int i = 0; i < COMPorts.Count; i++)
{
- case DataType.ֽ:
- dataReceiveThread = new Thread(new ThreadStart(DataReceiveBytesThread));
- break;
- case DataType.ַ:
- dataReceiveThread = new Thread(new ThreadStart(DataReceiveStrThread));
- break;
+ isThreadRunning[i] = true; // Ĭ߳
+ int portIndex = i; // ǰհ壩
+ Thread thread;
+
+ // ʹӦ̣߳˿
+ switch (dataType)
+ {
+ case DataType.ֽ:
+ thread = new Thread(() => DataReceiveBytesThread(portIndex));
+ break;
+ case DataType.ַ:
+ thread = new Thread(() => DataReceiveStrThread(portIndex));
+ break;
+ default:
+ thread = null;
+ break;
+ }
+
+ if (thread != null)
+ {
+ dataReceiveThreads.Add(thread);
+ }
}
+
OpenPort();
}
- ///
- /// ֽ
- ///
- private void DataReceiveBytesThread()
+
+ private void Update()
{
- while (true)
+ if (Input.GetKeyDown(KeyCode.BackQuote))
{
+ canvas?.SetActive(!canvas.activeInHierarchy);
+ }
+ if (Input.GetKeyDown(KeyCode.Escape))
+ {
+ canvas?.SetActive(false);
+ }
+ }
+
+ ///
+ /// ֽ̣߳崮
+ ///
+ private void DataReceiveBytesThread(int portIndex)
+ {
+ // ѭ̱߳־λΪtrueЧ
+ while (isThreadRunning[portIndex] && portIndex < serialPorts.Count)
+ {
+ SerialPort sp = serialPorts[portIndex];
if (sp != null && sp.IsOpen)
{
try
@@ -67,34 +318,41 @@ public class SensorManager : MonoBehaviour /*MonoSingleton*/
if (sp.BytesToRead > 0)
{
byte[] buffer = new byte[sp.BytesToRead];
- sp.Read(buffer, 0, sp.BytesToRead);
+ sp.Read(buffer, 0, buffer.Length);
string receivedData = Encoding.Default.GetString(buffer);
- //Debug.Log(receivedData);
+ //Debug.Log($" {sp.PortName} ֽ{receivedData}");
+
+ // ̴߳
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
- foreach (var s in allSensor)
+ foreach (var pair in allSensor)
{
- s.Value.ReceiveData(receivedData);
+ pair.Value.ReceiveData(receivedData, sp);
}
});
}
}
- catch (Exception)
+ catch (Exception ex)
{
- Debug.Log("Ϣʧ");
+ Debug.Log($" {sp.PortName} ֽմ{ex.Message}");
}
}
- Thread.Sleep(20);
+ Thread.Sleep(10); // CPUռ
}
}
///
- /// ַ
+ /// ַ̣߳崮
///
- private void DataReceiveStrThread()
+ private void DataReceiveStrThread(int portIndex)
{
- while (true)
+ // ÿ̶߳StringBuilder̳߳ͻ
+ StringBuilder sb = new StringBuilder();
+
+ // ѭ̱߳־λΪtrueЧ
+ while (isThreadRunning[portIndex] && portIndex < serialPorts.Count)
{
+ SerialPort sp = serialPorts[portIndex];
if (sp != null && sp.IsOpen)
{
try
@@ -102,49 +360,63 @@ public class SensorManager : MonoBehaviour /*MonoSingleton*/
if (sp.BytesToRead > 0)
{
sb.Append(sp.ReadExisting());
- //this.ColorLog(GDLog.LogColorState.Blue, sp.ReadLine());
+ string receivedData = sb.ToString();
+
UnityMainThreadDispatcher.Instance().Enqueue(() =>
{
foreach (var s in allSensor)
{
- s.Value.ReceiveData(sb.ToString());
+ try
+ {
+ //Debug.LogError(s.Value.name);
+ s.Value.ReceiveData(receivedData, sp);
+
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"ݴ{ex.Message}");
+ }
}
sb.Clear();
});
}
}
- catch (Exception)
+ catch (Exception ex)
{
- Debug.Log("Ϣʧ");
+ Debug.Log($" {sp.PortName} ַմ{ex.Message}");
}
}
- Thread.Sleep(20);
+ Thread.Sleep(10); // CPUռ
}
}
+
///
- /// Ϣ
+ /// ݵѴĴ
///
- ///
public void SendFunction(string str)
{
try
{
byte[] dataSend = Encoding.ASCII.GetBytes(str);
- if (sp != null && sp.IsOpen)
+ for (int i = 0; i < serialPorts.Count; i++)
{
- if (dataSend != null && dataSend.Length > 0)
+ SerialPort sp = serialPorts[i];
+ if (sp != null && sp.IsOpen && dataSend != null && dataSend.Length > 0)
{
sp.Write(dataSend, 0, dataSend.Length);
- Debug.Log("Ϣɹ" + str);
+ Debug.Log($" {sp.PortName} ͳɹ{str}");
}
}
}
- catch (Exception)
+ catch (Exception ex)
{
- Debug.Log("Ϣʧܣ" + str);
+ Debug.Log($"ʧܣ{ex.Message}ݣ{str}");
}
}
- //ȡָ
+
+ ///
+ /// ȡָ͵Ĵ
+ ///
public T GetSensor() where T : Sensor
{
try
@@ -152,62 +424,129 @@ public class SensorManager : MonoBehaviour /*MonoSingleton*/
string name = typeof(T).Name;
if (!allSensor.ContainsKey(name))
{
- allSensor.TryAdd(name, GetComponentInChildren());
- allSensor[name].Init(this);
+ T sensor = GetComponentInChildren();
+ if (sensor != null)
+ {
+ allSensor.TryAdd(name, sensor);
+ sensor.Init(this);
+ }
}
- //Debug.Log("ȡɹ");
+ Debug.Log($"ȡ {typeof(T).Name} ɹ");
return allSensor[name] as T;
}
- catch (Exception)
+ catch (Exception ex)
{
- Debug.Log("ȡʧ");
+ Debug.Log($"ȡ {typeof(T).Name} ʧܣ{ex.Message}");
return null;
}
}
- #region ڿر
- //
+
+ #region ڴرտ
+ ///
+ /// дڲӦ߳
+ ///
public void OpenPort()
{
try
{
- if (!sp.IsOpen)
+ Debug.Log("ڴ...");
+ for (int i = 0; i < serialPorts.Count; i++)
{
- sp.Open();
- dataReceiveThread.Start();
- Debug.Log("ڴɹ");
+ SerialPort sp = serialPorts[i];
+ if (sp != null && !sp.IsOpen)
+ {
+ sp.Open();
+ Debug.Log($" {sp.PortName} ɹ");
+ }
+
+ // Ӧ̣߳Чԣ
+ if (i < dataReceiveThreads.Count && dataReceiveThreads[i] != null && !dataReceiveThreads[i].IsAlive)
+ {
+ dataReceiveThreads[i].Start();
+ }
}
}
- catch (Exception)
+ catch (Exception ex)
{
- Debug.Log("ڴʧ");
+ Debug.Log($"ڴʧܣ{ex.ToString()}");
}
}
- //رմ
+ ///
+ /// رдڲֹ̣ͣ߳ȫֹAbort
+ ///
public void ClosePort()
{
- try
+ for (int i = 0; i < serialPorts.Count; i++)
{
- sp.Close();
- dataReceiveThread.Abort();
- Debug.Log("ڹر");
- }
- catch (Exception)
- {
- Debug.Log("ڹرʧ");
+ // 1. ֹ̣ͣ߳ͨ־λ
+ if (i < isThreadRunning.Length)
+ {
+ isThreadRunning[i] = false; // ֪ͨ߳˳ѭ
+ }
+
+ // ȴֹ߳1룩
+ if (i < dataReceiveThreads.Count && dataReceiveThreads[i] != null && dataReceiveThreads[i].IsAlive)
+ {
+ dataReceiveThreads[i].Join(1000);
+ dataReceiveThreads[i] = null;
+ }
+
+ // 2. رմ
+ SerialPort sp = serialPorts[i];
+ if (sp != null && sp.IsOpen)
+ {
+ try
+ {
+ sp.Close();
+ Debug.Log($" {sp.PortName} رճɹ");
+ }
+ catch (Exception ex)
+ {
+ Debug.Log($" {sp.PortName} رʧܣ{ex.ToString()}");
+ }
+ serialPorts[i] = null;
+ }
}
}
#endregion
- #region Unity ˳
+ #region Unity
private void OnApplicationQuit()
{
ClosePort();
}
+
private void OnDisable()
{
- this.Log("Ϊʲôرˣ" + gameObject.name);
ClosePort();
}
+
+ ///
+ /// ȡWindowsڲ
+ ///
+ public string[] GetAllWindowsCOMPorts()
+ {
+ try
+ {
+ var ports = SerialPort.GetPortNames();
+ // COM˿ں
+ Array.Sort(ports, (a, b) =>
+ {
+ if (int.TryParse(a.Replace("COM", ""), out int numA) &&
+ int.TryParse(b.Replace("COM", ""), out int numB))
+ {
+ return numA.CompareTo(numB);
+ }
+ return string.Compare(a, b);
+ });
+ return ports;
+ }
+ catch (Exception e)
+ {
+ Debug.LogError($"ȡʧܣ{e.Message}\n{e.StackTrace}");
+ return Array.Empty();
+ }
+ }
#endregion
}
\ No newline at end of file
diff --git a/Assets/StreamingAssets/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json b/Assets/StreamingAssets/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
index 09d2940..81e1068 100644
--- a/Assets/StreamingAssets/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
+++ b/Assets/StreamingAssets/daoNiaoShu/ExcelData/ExcelToJson/BookPanelData.json
@@ -1 +1 @@
-[{"id":1,"group":"1","txt":"公犬导尿术
一、导尿术的适应症与禁忌症
1.适应症
1)急性尿潴留。
2)需采集无菌尿液样本或进行膀胱灌注治疗。
3)尿道梗阻解除后维持排尿通路。
2.禁忌症
1)尿道破裂或严重损伤(需手术修复)。
2)泌尿道急性感染未控制(避免逆行感染扩散)。
3)严重凝血功能障碍。"},{"id":2,"group":"1","txt":"二、公犬泌尿系统解剖要点
1.尿道结构
1)公犬尿道分为前列腺前部、前列腺部和阴茎部,导尿管需通过阴茎部尿道(长约15-20cm)进入膀胱。
2)尿道口位于阴茎龟头顶端,被包皮覆盖,操作需向后推包皮暴露。
2.体表定位标志
1)坐骨结节为导尿管体外测量的终点(尿道口至坐骨结节距离≈尿道长度)。
2)膀胱充盈时可在腹后部触及球形隆起(叩诊浊音)。"},{"id":3,"group":"1","txt":"三、术前准备工作
1.物品准备
1)核心器械:型号适合的硅胶导尿管、无菌外科手套、20ml注射器、0.9%生理盐水、利多卡因凝胶、氯己定棉球、无菌持物镊等。
2)辅助物品:电动剃毛器(备皮范围直径5-10cm)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。
2.患犬准备
1)镇静镇痛:静脉注射右美托咪定(5μg/kg)+布托啡诺(0.3mg/kg),提供深度镇静与镇痛。
2)体位:右侧卧位,后肢外展固定,充分暴露会阴部。
3)备皮:剃除包皮口周围长毛,清洁皮肤碎屑。
3.术者准备
七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":4,"group":"1","txt":"四、规范操作流程
1.清洁消毒
1)向后推包皮暴露龟头,用20ml生理盐水冲洗包皮腔污物。
2)氯己定棉球消毒(2次):
(1)第1次:由内向外环形清洁包皮口及周围皮肤(半径5-10cm)。
(2)第2次:重点消毒尿道口及龟头表面。
2.尿道麻醉:食指涂抹利多卡因凝胶,旋转涂抹龟头及尿道口,等待2-3分钟起效。
3.导尿管测量与插入
1)测量:导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度(体外预估法)。
2)插管
(1)导尿管外涂抗生素软膏润滑。
(2)助手向后推包皮暴露阴茎2-5cm,术者持导管沿尿道走向缓慢插入(遇阻力勿强行推进)。
(3)成功标志:尿液流入集尿袋,膀胱逐渐塌陷。
4.导尿后处理
1)尿液引流完毕后,缓慢拔出导尿管。
2)脱手套,按医疗废物分类处理物品。"},{"id":5,"group":"1","txt":"五、注意事项与并发症预防
1.无菌操作
1)手套破损需立即更换。
2)消毒棉球限单次单向使用。
2.操作技巧
1)尿道痉挛时暂停操作,追加利多卡因凝胶(禁用暴力插管)。
2)导尿管插入深度不超过坐骨结节标记点(避免膀胱壁损伤)。
3)并发症应对
(1)尿道损伤:立即停止操作,评估是否需膀胱穿刺或手术。
(2)逆行感染:严格无菌操作,术后监测排尿状态及体温。"},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""},{"id":0,"group":"","txt":""}]
+[{"id":1,"group":"1","topTxt":"一、导尿术的适应症与禁忌症","txt":"1.适应症
1)急性尿潴留。
2)需采集无菌尿液样本或进行膀胱灌注治疗。
3)尿道梗阻解除后维持排尿通路。
2.禁忌症
1)尿道破裂或严重损伤(需手术修复)。
2)泌尿道急性感染未控制(避免逆行感染扩散)。
3)严重凝血功能障碍。"},{"id":2,"group":"1","topTxt":"二、公犬泌尿系统解剖要点","txt":"1.尿道结构
1)公犬尿道分为前列腺前部、前列腺部和阴茎部,导尿管需通过阴茎部尿道(长约15-20cm)进入膀胱。
2)尿道口位于阴茎龟头顶端,被包皮覆盖,操作需向后推包皮暴露。
2.体表定位标志
1)坐骨结节为导尿管体外测量的终点(尿道口至坐骨结节距离≈尿道长度)。
2)膀胱充盈时可在腹后部触及球形隆起(叩诊浊音)。"},{"id":3,"group":"1","topTxt":"三、术前准备工作","txt":"1.物品准备
1)核心器械:型号适合的硅胶导尿管、无菌外科手套、20ml注射器、0.9%生理盐水、利多卡因凝胶、氯己定棉球、无菌持物镊等。
2)辅助物品:电动剃毛器(备皮范围直径5-10cm)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。
2.患犬准备
1)镇静镇痛:静脉注射右美托咪定(5μg/kg)+布托啡诺(0.3mg/kg),提供深度镇静与镇痛。"},{"id":4,"group":"1","topTxt":"","txt":"
2)体位:右侧卧位,后肢外展固定,充分暴露会阴部。
3)备皮:剃除包皮口周围长毛,清洁皮肤碎屑。
3.术者准备
七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":5,"group":"1","topTxt":"四、规范操作流程","txt":"1.清洁消毒
1)向后推包皮暴露龟头,用20ml生理盐水冲洗包皮腔污物。
2)氯己定棉球消毒(2次):
(1)第1次:由内向外环形清洁包皮口及周围皮肤(半径5-10cm)。
(2)第2次:重点消毒尿道口及龟头表面。
2.尿道麻醉:食指涂抹利多卡因凝胶,旋转涂抹龟头及尿道口,等待2-3分钟起效。
3.导尿管测量与插入
1)测量:导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度(体外预估法)。"},{"id":6,"group":"1","topTxt":"","txt":"
2)插管
(1)导尿管外涂抗生素软膏润滑。
(2)助手向后推包皮暴露阴茎2-5cm,术者持导管沿尿道走向缓慢插入(遇阻力勿强行推进)。
(3)成功标志:尿液流入集尿袋,膀胱逐渐塌陷。
4.导尿后处理
1)尿液引流完毕后,缓慢拔出导尿管。
2)脱手套,按医疗废物分类处理物品。"},{"id":7,"group":"1","topTxt":"五、注意事项与并发症预防","txt":"1.无菌操作
1)手套破损需立即更换。
2)消毒棉球限单次单向使用。
2.操作技巧
1)尿道痉挛时暂停操作,追加利多卡因凝胶(禁用暴力插管)。
2)导尿管插入深度不超过坐骨结节标记点(避免膀胱壁损伤)。
3)并发症应对
(1)尿道损伤:立即停止操作,评估是否需膀胱穿刺或手术。
(2)逆行感染:严格无菌操作,术后监测排尿状态及体温。"},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""},{"id":0,"group":"","topTxt":"","txt":""}]
diff --git a/Assets/StreamingAssets/wakeupresource.jet b/Assets/StreamingAssets/wakeupresource.jet
index fca8b39..f42a0aa 100644
Binary files a/Assets/StreamingAssets/wakeupresource.jet and b/Assets/StreamingAssets/wakeupresource.jet differ
diff --git a/Assets/Third/AI/Plugins/x86/msc.dll b/Assets/Third/AI/Plugins/x86/msc.dll
index 7049e08..272f5ec 100644
Binary files a/Assets/Third/AI/Plugins/x86/msc.dll and b/Assets/Third/AI/Plugins/x86/msc.dll differ
diff --git a/Assets/Third/AI/Plugins/x86_64/msc_x64.dll b/Assets/Third/AI/Plugins/x86_64/msc_x64.dll
index 0926930..59e50ee 100644
Binary files a/Assets/Third/AI/Plugins/x86_64/msc_x64.dll and b/Assets/Third/AI/Plugins/x86_64/msc_x64.dll differ
diff --git a/Assets/Third/AI/Scripts/TTS&&STT/ZXK/XunFeiWakeup.cs b/Assets/Third/AI/Scripts/TTS&&STT/ZXK/XunFeiWakeup.cs
index d5e0166..72a19bb 100644
--- a/Assets/Third/AI/Scripts/TTS&&STT/ZXK/XunFeiWakeup.cs
+++ b/Assets/Third/AI/Scripts/TTS&&STT/ZXK/XunFeiWakeup.cs
@@ -15,7 +15,7 @@ using UnityThreadingUtils;
public class XunFeiWakeup : MonoBehaviour
{
//ѴʣСС
- private const string app_id = "appid=0b1fcc5f,word_dir= . ";//appid aiui.dllmsc.dllҪ
+ private const string app_id = "appid=03377640,word_dir= . ";//appid aiui.dllmsc.dllҪ
private string qivw_session_begin_params/* = "ivw_threshold=0:1450,sst=wakeup,ivw_res_path =fo|" + (Application.streamingAssetsPath + "/wakeupresource.jet").Replace("/", "\\")*/;
diff --git a/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/BookPanelData.cs b/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/BookPanelData.cs
index 753f114..6433b66 100644
--- a/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/BookPanelData.cs
+++ b/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/BookPanelData.cs
@@ -7,6 +7,8 @@ namespace DongWuYiXue.DaoNiaoShu
public int id;
//组
public string group;
+
//标题
+
public string topTxt;
//内容
public string txt;
diff --git a/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/ExcelData.cs b/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/ExcelData.cs
index 6cbaa2b..ad41900 100644
--- a/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/ExcelData.cs
+++ b/Assets/_Scripts/Application/daoNiaoShu/ExcelData/CSharpPath/ExcelData.cs
@@ -445,6 +445,33 @@ public List GetListBookPanelDatagroup()
+public BookPanelData GetBookPanelDatatopTxt(string topTxt)
+{
+ for (int i = 0; i < allBookPanelData.Count; i++)
+ {
+ if (allBookPanelData[i].topTxt == topTxt)
+ {
+ return allBookPanelData[i];
+ }
+ }
+ return null;
+}
+
+public List GetListBookPanelDatatopTxt()
+{
+ List res = new List();
+ for (int i = 0; i < allBookPanelData.Count; i++)
+ {
+ if (!res.Contains(allBookPanelData[i].topTxt))
+ {
+ res.Add(allBookPanelData[i].topTxt);
+ }
+ }
+ return res;
+}
+
+
+
public BookPanelData GetBookPanelDatatxt(string txt)
{
for (int i = 0; i < allBookPanelData.Count; i++)
diff --git a/Assets/_Scripts/Application/daoNiaoShu/UI/BookPanel.cs b/Assets/_Scripts/Application/daoNiaoShu/UI/BookPanel.cs
index d0681d0..bc3b69a 100644
--- a/Assets/_Scripts/Application/daoNiaoShu/UI/BookPanel.cs
+++ b/Assets/_Scripts/Application/daoNiaoShu/UI/BookPanel.cs
@@ -40,7 +40,7 @@ namespace DongWuYiXue.DaoNiaoShu
}
public void ShowBook(string group)
{
- if(bookPro!=null)
+ if (bookPro != null)
{
Destroy(bookPro.gameObject);
bookPro = null;
@@ -55,29 +55,31 @@ namespace DongWuYiXue.DaoNiaoShu
if (!shangxiahuadong)
{
shangxiahuadong = true;
- bookPro.transform.FindFirst("上下滑动动画").SetActive(true);
+ //bookPro.transform.FindFirst("上下滑动动画").SetActive(true);
}
});
- bookPanelDatas = GetModel().excelData.allBookPanelData.FindAll(e=>e.group == group);
+ bookPanelDatas = GetModel().excelData.allBookPanelData.FindAll(e => e.group == group);
for (int i = 0; i < bookPanelDatas.Count; i++)
{
if (i % 2 != 0 && i > 0)
{
- AddPaper_Txt(bookPro, bookPanelDatas[i - 1].txt.Replace("
","\n"), bookPanelDatas[i].txt.Replace("
", "\n"), i,i+1);
+ AddPaper_Txt(bookPro, bookPanelDatas[i - 1].txt.Replace("
", "\n"), bookPanelDatas[i - 1].topTxt, bookPanelDatas[i].txt.Replace("
", "\n"), bookPanelDatas[i].topTxt, i, i + 1);
}
- if(i == (bookPanelDatas.Count - 1) && (i % 2 == 0))
+ if (i == (bookPanelDatas.Count - 1) && (i % 2 == 0))
{
- AddPaper_Txt(bookPro, bookPanelDatas[i].txt.Replace("
", "\n"), "",i+1,i+2);
+ AddPaper_Txt(bookPro, bookPanelDatas[i].txt.Replace("
", "\n"), bookPanelDatas[i].topTxt, "", "", i + 1, i + 2);
}
}
AddPaper_FengMian(bookPro);
}
- public void AddPaper_Txt(BookPro book,string frontTxt,string backTxt,int frontNum,int backNum)
+ public void AddPaper_Txt(BookPro book, string frontTxt, string frontTopText, string backTxt, string backTopText, int frontNum, int backNum)
{
GameObject frontPage = Instantiate(FrontPagePrefab);
+ frontPage.FindFirst("bookTopText").text = frontTopText;
frontPage.FindFirst("bookText").text = frontTxt;
frontPage.FindFirst("numText").text = frontNum.ToString();
GameObject backPage = Instantiate(BackPagePrefab);
+ backPage.FindFirst("bookTopText").text = backTopText;
backPage.FindFirst("bookText").text = backTxt;
backPage.FindFirst("numText").text = backNum.ToString();
frontPage.transform.SetParent(book.transform, false);
diff --git a/msc/069ff7edfa99257b1e2ff25853437b0e/kivw.dat b/msc/069ff7edfa99257b1e2ff25853437b0e/kivw.dat
new file mode 100644
index 0000000..aa609cc
Binary files /dev/null and b/msc/069ff7edfa99257b1e2ff25853437b0e/kivw.dat differ
diff --git a/msc/2aae4e51c4e2dd03beb0e4c8c8d7affe/kivw.dat b/msc/2aae4e51c4e2dd03beb0e4c8c8d7affe/kivw.dat
index 50e8b4c..3b0e9cf 100644
--- a/msc/2aae4e51c4e2dd03beb0e4c8c8d7affe/kivw.dat
+++ b/msc/2aae4e51c4e2dd03beb0e4c8c8d7affe/kivw.dat
@@ -1,3 +1,3 @@
-2025/11/28 09:18:21
-80580f9047ae7f4bd0325a05c2f5cdaa
-U}pu<^<^oJeǃ#=bC]㋽&KJ|Yi8/s(dT{zu+ktL3P+~8|?=Vi(H_F!.8lr[us(ܩ1T
\ No newline at end of file
+2026/01/04 14:58:38
+3dea935fd3a1ead6af9393bb07c8f238
+/tk#xgb?qCET
mi#m0h%xrq2ΧB'`.⏠ޯ+_t4\dAvj5NLǻh<b8%i>=k!еWۣN|J>lD,.4
\ No newline at end of file