最新修改提交

This commit is contained in:
高铎 2026-01-04 17:36:58 +08:00
parent 77176755fa
commit c5574a995b
25 changed files with 1106 additions and 148 deletions

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

View File

@ -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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

View File

@ -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:

View File

@ -1 +1 @@
[{"id":1,"group":"1","txt":"公犬导尿术<br>一、导尿术的适应症与禁忌症​​<br>1.<color=red>适应</color>症​​<br>1<color=red>急性尿潴留</color>。<br>2需<color=red>采集无菌尿液样本</color>或进行<color=red>膀胱灌注</color>治疗。<br>3尿道梗阻解除后<color=red>维持排尿通路</color>。<br>2.<color=red>禁忌</color>症​​<br>1<color=red>尿道破裂</color>或<color=red>严重损伤</color>(需手术修复)。<br>2泌尿道<color=red>急性感染未控制</color>(避免逆行感染扩散)。<br>3<color=red>严重凝血功能障碍</color>。"},{"id":2,"group":"1","txt":"二、公犬泌尿系统解剖要点<br>1.尿道结构​​<br>1<color=red>公犬尿道</color>分为<color=red>前列腺前部、前列腺部和阴茎部</color>,导尿管需通过阴茎部尿道(<color=red>长约15-20cm</color>)进入膀胱。<br>2尿道口位于阴茎龟头顶端被包皮覆盖<color=red>操作需向后推包皮暴露</color>。<br>2.体表定位标志​​<br>1<color=red>坐骨结节为导尿管体外测量的终点</color><color=red>尿道口至坐骨结节距离≈尿道长度</color>)。<br>2膀胱充盈时可在腹后部触及<color=red>球形隆起</color><color=red>叩诊浊音</color>)。"},{"id":3,"group":"1","txt":"三、术前准备工作<br>1.物品准备​​<br>1核心器械<color=red>型号适合的硅胶导尿管</color>、无菌外科手套、20ml注射器、0.9%生理盐水、<color=red>利多卡因凝胶</color>、<color=red>氯己定棉球</color>、无菌持物镊等。<br>2辅助物品电动剃毛器<color=red>备皮范围直径5-10cm</color>)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。<br>2.患犬准备​​<br>1镇静镇痛静脉注射<color=red>右美托咪定5μg/kg+布托啡诺0.3mg/kg</color>,提供深度镇静与镇痛。<br>2体位<color=red>右侧卧位,后肢外展固定,充分暴露会阴部</color>。<br>3备皮剃除包皮口周围长毛清洁皮肤碎屑。<br>3.术者准备​​<br>七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":4,"group":"1","txt":"四、规范操作流程<br>1.清洁消毒​​<br>1向后推包皮暴露龟头<color=red>用20ml生理盐水冲洗包皮腔污物</color>。<br>2氯己定棉球消毒2次<br>1第1次<color=red>由内向外环形清洁包皮口及周围皮肤半径5-10cm</color>。<br>2第2次重点<color=red>消毒尿道口及龟头表面</color>。<br>2.尿道麻醉:<color=red>食指涂抹利多卡因凝胶旋转涂抹龟头及尿道口等待2-3分钟起效</color>。<br>3.导尿管测量与插入​​<br>1测量<color=red>导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度</color>(体外预估法)。<br>2插管<br>1<color=red>导尿管外涂抗生素软膏润滑</color>。<br>2助手<color=red>向后推包皮暴露阴茎2-5cm</color>,术者持导管沿尿道走向<color=red>缓慢插入</color>(遇阻力勿强行推进)。<br>3成功标志<color=red>尿液流入集尿袋,膀胱逐渐塌陷</color>。<br>4.导尿后处理​​<br>1<color=red>尿液引流完毕后,缓慢拔出导尿管</color>。<br>2脱手套按医疗废物分类处理物品。"},{"id":5,"group":"1","txt":"五、注意事项与并发症预防<br>1.无菌操作​​<br>1手套破损需立即更换。<br>2消毒棉球限单次单向使用。<br>2.操作技巧​​<br>1<color=red>尿道痉挛时暂停操作</color><color=red>追加利多卡因凝胶</color><color=red>禁用暴力插管</color>)。<br>2<color=red>导尿管插入深度不超过坐骨结节标记点</color><color=red>避免膀胱壁损伤</color>)。<br>3并发症应对<br>1尿道损伤立即停止操作评估是否需膀胱穿刺或手术。<br>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.<color=red>适应</color>症​​<br>1<color=red>急性尿潴留</color>。<br>2需<color=red>采集无菌尿液样本</color>或进行<color=red>膀胱灌注</color>治疗。<br>3尿道梗阻解除后<color=red>维持排尿通路</color>。<br>2.<color=red>禁忌</color>症​​<br>1<color=red>尿道破裂</color>或<color=red>严重损伤</color>(需手术修复)。<br>2泌尿道<color=red>急性感染未控制</color>(避免逆行感染扩散)。<br>3<color=red>严重凝血功能障碍</color>。"},{"id":2,"group":"1","topTxt":"二、公犬泌尿系统解剖要点","txt":"1.尿道结构​​<br>1<color=red>公犬尿道</color>分为<color=red>前列腺前部、前列腺部和阴茎部</color>,导尿管需通过阴茎部尿道(<color=red>长约15-20cm</color>)进入膀胱。<br>2尿道口位于阴茎龟头顶端被包皮覆盖<color=red>操作需向后推包皮暴露</color>。<br>2.体表定位标志​​<br>1<color=red>坐骨结节为导尿管体外测量的终点</color><color=red>尿道口至坐骨结节距离≈尿道长度</color>)。<br>2膀胱充盈时可在腹后部触及<color=red>球形隆起</color><color=red>叩诊浊音</color>)。"},{"id":3,"group":"1","topTxt":"三、术前准备工作","txt":"1.物品准备​​<br>1核心器械<color=red>型号适合的硅胶导尿管</color>、无菌外科手套、20ml注射器、0.9%生理盐水、<color=red>利多卡因凝胶</color>、<color=red>氯己定棉球</color>、无菌持物镊等。<br>2辅助物品电动剃毛器<color=red>备皮范围直径5-10cm</color>)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。<br>2.患犬准备​​<br>1镇静镇痛静脉注射<color=red>右美托咪定5μg/kg+布托啡诺0.3mg/kg</color>,提供深度镇静与镇痛。"},{"id":4,"group":"1","topTxt":"","txt":"<br>2体位<color=red>右侧卧位,后肢外展固定,充分暴露会阴部</color>。<br>3备皮剃除包皮口周围长毛清洁皮肤碎屑。<br>3.术者准备​​<br>七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":5,"group":"1","topTxt":"四、规范操作流程","txt":"1.清洁消毒​​<br>1向后推包皮暴露龟头<color=red>用20ml生理盐水冲洗包皮腔污物</color>。<br>2氯己定棉球消毒2次<br>1第1次<color=red>由内向外环形清洁包皮口及周围皮肤半径5-10cm</color>。<br>2第2次重点<color=red>消毒尿道口及龟头表面</color>。<br>2.尿道麻醉:<color=red>食指涂抹利多卡因凝胶旋转涂抹龟头及尿道口等待2-3分钟起效</color>。<br>3.导尿管测量与插入​​<br>1测量<color=red>导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度</color>(体外预估法)。"},{"id":6,"group":"1","topTxt":"","txt":"<br>2插管<br>1<color=red>导尿管外涂抗生素软膏润滑</color>。<br>2助手<color=red>向后推包皮暴露阴茎2-5cm</color>,术者持导管沿尿道走向<color=red>缓慢插入</color>(遇阻力勿强行推进)。<br>3成功标志<color=red>尿液流入集尿袋,膀胱逐渐塌陷</color>。<br>4.导尿后处理​​<br>1<color=red>尿液引流完毕后,缓慢拔出导尿管</color>。<br>2脱手套按医疗废物分类处理物品。"},{"id":7,"group":"1","topTxt":"五、注意事项与并发症预防","txt":"1.无菌操作​​<br>1手套破损需立即更换。<br>2消毒棉球限单次单向使用。<br>2.操作技巧​​<br>1<color=red>尿道痉挛时暂停操作</color><color=red>追加利多卡因凝胶</color><color=red>禁用暴力插管</color>)。<br>2<color=red>导尿管插入深度不超过坐骨结节标记点</color><color=red>避免膀胱壁损伤</color>)。<br>3并发症应对<br>1尿道损伤立即停止操作评估是否需膀胱穿刺或手术。<br>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":""}]

View File

@ -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<SensorManager>().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;

View File

@ -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"))

View File

@ -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<SensorManager>().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);
}
}

View File

@ -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<SensorManager>().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}");
}

View File

@ -1,5 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using System.IO.Ports;
using UnityEngine;
/// <summary>
/// 传感器基类
@ -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)
{

View File

@ -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];

View File

@ -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<SensorManager>*/
{
#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<string, Sensor> allSensor = new Dictionary<string, Sensor>();
//StringBuilder sb = new StringBuilder();
//private void Start()
//{
// sp = new SerialPort(portName, baudRate, parity, dataBits, stopBits);
// foreach (Sensor s in GetComponentsInChildren<Sensor>())
// {
// 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();
//}
///// <summary>
///// 接收字节流
///// </summary>
//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);
// }
//}
///// <summary>
///// 接收字符串
///// </summary>
//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);
// }
//}
///// <summary>
///// 发送消息
///// </summary>
///// <param name="dataSend"></param>
//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<T>() where T : Sensor
//{
// try
// {
// string name = typeof(T).Name;
// if (!allSensor.ContainsKey(name))
// {
// allSensor.TryAdd(name, GetComponentInChildren<T>());
// 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<SensorManager>*/
private int dataBits = 8;
[Header("停止位")]
private StopBits stopBits = StopBits.One;
SerialPort sp = null;
Thread dataReceiveThread;
[Header("接收数据格式")]
public DataType dataType;
#endregion
private Dictionary<string, Sensor> allSensor = new Dictionary<string, Sensor>();
StringBuilder sb = new StringBuilder();
public GameObject canvas;
List<string> COMPorts = new List<string>();
List<SerialPort> serialPorts = new List<SerialPort>();
List<Thread> dataReceiveThreads = new List<Thread>();
// 线程运行状态标志(每个串口对应一个标志)
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<Sensor>())
{
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();
}
/// <summary>
/// 接收字节流
/// </summary>
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);
}
}
/// <summary>
/// 字节流接收线程(绑定具体串口索引)
/// </summary>
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<SensorManager>*/
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占用
}
}
/// <summary>
/// 接收字符串
/// 字符串接收线程(绑定具体串口索引)
/// </summary>
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<SensorManager>*/
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占用
}
}
/// <summary>
/// 发送消息
/// 发送数据到所有已打开的串口
/// </summary>
/// <param name="dataSend"></param>
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}");
}
}
//获取指定传感器
/// <summary>
/// 获取指定类型的传感器
/// </summary>
public T GetSensor<T>() where T : Sensor
{
try
@ -152,62 +424,129 @@ public class SensorManager : MonoBehaviour /*MonoSingleton<SensorManager>*/
string name = typeof(T).Name;
if (!allSensor.ContainsKey(name))
{
allSensor.TryAdd(name, GetComponentInChildren<T>());
allSensor[name].Init(this);
T sensor = GetComponentInChildren<T>();
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
/// <summary>
/// 打开所有串口并启动对应线程
/// </summary>
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()}");
}
}
//关闭串口
/// <summary>
/// 关闭所有串口并停止线程安全终止避免Abort
/// </summary>
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();
}
/// <summary>
/// 获取所有Windows串口并排序
/// </summary>
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<string>();
}
}
#endregion
}

View File

@ -1 +1 @@
[{"id":1,"group":"1","txt":"公犬导尿术<br>一、导尿术的适应症与禁忌症​​<br>1.<color=red>适应</color>症​​<br>1<color=red>急性尿潴留</color>。<br>2需<color=red>采集无菌尿液样本</color>或进行<color=red>膀胱灌注</color>治疗。<br>3尿道梗阻解除后<color=red>维持排尿通路</color>。<br>2.<color=red>禁忌</color>症​​<br>1<color=red>尿道破裂</color>或<color=red>严重损伤</color>(需手术修复)。<br>2泌尿道<color=red>急性感染未控制</color>(避免逆行感染扩散)。<br>3<color=red>严重凝血功能障碍</color>。"},{"id":2,"group":"1","txt":"二、公犬泌尿系统解剖要点<br>1.尿道结构​​<br>1<color=red>公犬尿道</color>分为<color=red>前列腺前部、前列腺部和阴茎部</color>,导尿管需通过阴茎部尿道(<color=red>长约15-20cm</color>)进入膀胱。<br>2尿道口位于阴茎龟头顶端被包皮覆盖<color=red>操作需向后推包皮暴露</color>。<br>2.体表定位标志​​<br>1<color=red>坐骨结节为导尿管体外测量的终点</color><color=red>尿道口至坐骨结节距离≈尿道长度</color>)。<br>2膀胱充盈时可在腹后部触及<color=red>球形隆起</color><color=red>叩诊浊音</color>)。"},{"id":3,"group":"1","txt":"三、术前准备工作<br>1.物品准备​​<br>1核心器械<color=red>型号适合的硅胶导尿管</color>、无菌外科手套、20ml注射器、0.9%生理盐水、<color=red>利多卡因凝胶</color>、<color=red>氯己定棉球</color>、无菌持物镊等。<br>2辅助物品电动剃毛器<color=red>备皮范围直径5-10cm</color>)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。<br>2.患犬准备​​<br>1镇静镇痛静脉注射<color=red>右美托咪定5μg/kg+布托啡诺0.3mg/kg</color>,提供深度镇静与镇痛。<br>2体位<color=red>右侧卧位,后肢外展固定,充分暴露会阴部</color>。<br>3备皮剃除包皮口周围长毛清洁皮肤碎屑。<br>3.术者准备​​<br>七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":4,"group":"1","txt":"四、规范操作流程<br>1.清洁消毒​​<br>1向后推包皮暴露龟头<color=red>用20ml生理盐水冲洗包皮腔污物</color>。<br>2氯己定棉球消毒2次<br>1第1次<color=red>由内向外环形清洁包皮口及周围皮肤半径5-10cm</color>。<br>2第2次重点<color=red>消毒尿道口及龟头表面</color>。<br>2.尿道麻醉:<color=red>食指涂抹利多卡因凝胶旋转涂抹龟头及尿道口等待2-3分钟起效</color>。<br>3.导尿管测量与插入​​<br>1测量<color=red>导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度</color>(体外预估法)。<br>2插管<br>1<color=red>导尿管外涂抗生素软膏润滑</color>。<br>2助手<color=red>向后推包皮暴露阴茎2-5cm</color>,术者持导管沿尿道走向<color=red>缓慢插入</color>(遇阻力勿强行推进)。<br>3成功标志<color=red>尿液流入集尿袋,膀胱逐渐塌陷</color>。<br>4.导尿后处理​​<br>1<color=red>尿液引流完毕后,缓慢拔出导尿管</color>。<br>2脱手套按医疗废物分类处理物品。"},{"id":5,"group":"1","txt":"五、注意事项与并发症预防<br>1.无菌操作​​<br>1手套破损需立即更换。<br>2消毒棉球限单次单向使用。<br>2.操作技巧​​<br>1<color=red>尿道痉挛时暂停操作</color><color=red>追加利多卡因凝胶</color><color=red>禁用暴力插管</color>)。<br>2<color=red>导尿管插入深度不超过坐骨结节标记点</color><color=red>避免膀胱壁损伤</color>)。<br>3并发症应对<br>1尿道损伤立即停止操作评估是否需膀胱穿刺或手术。<br>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.<color=red>适应</color>症​​<br>1<color=red>急性尿潴留</color>。<br>2需<color=red>采集无菌尿液样本</color>或进行<color=red>膀胱灌注</color>治疗。<br>3尿道梗阻解除后<color=red>维持排尿通路</color>。<br>2.<color=red>禁忌</color>症​​<br>1<color=red>尿道破裂</color>或<color=red>严重损伤</color>(需手术修复)。<br>2泌尿道<color=red>急性感染未控制</color>(避免逆行感染扩散)。<br>3<color=red>严重凝血功能障碍</color>。"},{"id":2,"group":"1","topTxt":"二、公犬泌尿系统解剖要点","txt":"1.尿道结构​​<br>1<color=red>公犬尿道</color>分为<color=red>前列腺前部、前列腺部和阴茎部</color>,导尿管需通过阴茎部尿道(<color=red>长约15-20cm</color>)进入膀胱。<br>2尿道口位于阴茎龟头顶端被包皮覆盖<color=red>操作需向后推包皮暴露</color>。<br>2.体表定位标志​​<br>1<color=red>坐骨结节为导尿管体外测量的终点</color><color=red>尿道口至坐骨结节距离≈尿道长度</color>)。<br>2膀胱充盈时可在腹后部触及<color=red>球形隆起</color><color=red>叩诊浊音</color>)。"},{"id":3,"group":"1","topTxt":"三、术前准备工作","txt":"1.物品准备​​<br>1核心器械<color=red>型号适合的硅胶导尿管</color>、无菌外科手套、20ml注射器、0.9%生理盐水、<color=red>利多卡因凝胶</color>、<color=red>氯己定棉球</color>、无菌持物镊等。<br>2辅助物品电动剃毛器<color=red>备皮范围直径5-10cm</color>)、集尿袋、抗生素软膏、一次性医用垫单、医疗污物桶。<br>2.患犬准备​​<br>1镇静镇痛静脉注射<color=red>右美托咪定5μg/kg+布托啡诺0.3mg/kg</color>,提供深度镇静与镇痛。"},{"id":4,"group":"1","topTxt":"","txt":"<br>2体位<color=red>右侧卧位,后肢外展固定,充分暴露会阴部</color>。<br>3备皮剃除包皮口周围长毛清洁皮肤碎屑。<br>3.术者准备​​<br>七步洗手法洗手,戴无菌口罩、帽子、手套。"},{"id":5,"group":"1","topTxt":"四、规范操作流程","txt":"1.清洁消毒​​<br>1向后推包皮暴露龟头<color=red>用20ml生理盐水冲洗包皮腔污物</color>。<br>2氯己定棉球消毒2次<br>1第1次<color=red>由内向外环形清洁包皮口及周围皮肤半径5-10cm</color>。<br>2第2次重点<color=red>消毒尿道口及龟头表面</color>。<br>2.尿道麻醉:<color=red>食指涂抹利多卡因凝胶旋转涂抹龟头及尿道口等待2-3分钟起效</color>。<br>3.导尿管测量与插入​​<br>1测量<color=red>导尿管头端置于尿道口,尾端拉至坐骨结节处标记刻度</color>(体外预估法)。"},{"id":6,"group":"1","topTxt":"","txt":"<br>2插管<br>1<color=red>导尿管外涂抗生素软膏润滑</color>。<br>2助手<color=red>向后推包皮暴露阴茎2-5cm</color>,术者持导管沿尿道走向<color=red>缓慢插入</color>(遇阻力勿强行推进)。<br>3成功标志<color=red>尿液流入集尿袋,膀胱逐渐塌陷</color>。<br>4.导尿后处理​​<br>1<color=red>尿液引流完毕后,缓慢拔出导尿管</color>。<br>2脱手套按医疗废物分类处理物品。"},{"id":7,"group":"1","topTxt":"五、注意事项与并发症预防","txt":"1.无菌操作​​<br>1手套破损需立即更换。<br>2消毒棉球限单次单向使用。<br>2.操作技巧​​<br>1<color=red>尿道痉挛时暂停操作</color><color=red>追加利多卡因凝胶</color><color=red>禁用暴力插管</color>)。<br>2<color=red>导尿管插入深度不超过坐骨结节标记点</color><color=red>避免膀胱壁损伤</color>)。<br>3并发症应对<br>1尿道损伤立即停止操作评估是否需膀胱穿刺或手术。<br>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":""}]

Binary file not shown.

View File

@ -15,7 +15,7 @@ using UnityThreadingUtils;
public class XunFeiWakeup : MonoBehaviour
{
//唤醒词:小智小智
private const string app_id = "appid=0b1fcc5f,word_dir= . ";//appid aiui.dll和msc.dll要配套
private const string app_id = "appid=03377640,word_dir= . ";//appid aiui.dll和msc.dll要配套
private string qivw_session_begin_params/* = "ivw_threshold=0:1450,sst=wakeup,ivw_res_path =fo|" + (Application.streamingAssetsPath + "/wakeupresource.jet").Replace("/", "\\")*/;

View File

@ -7,6 +7,8 @@ namespace DongWuYiXue.DaoNiaoShu
public int id;
//组
public string group;
//标题
public string topTxt;
//内容
public string txt;

View File

@ -445,6 +445,33 @@ public List<string> 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<string> GetListBookPanelDatatopTxt()
{
List<string> res = new List<string>();
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++)

View File

@ -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<GameModel>().excelData.allBookPanelData.FindAll(e=>e.group == group);
bookPanelDatas = GetModel<GameModel>().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("<br>","\n"), bookPanelDatas[i].txt.Replace("<br>", "\n"), i,i+1);
AddPaper_Txt(bookPro, bookPanelDatas[i - 1].txt.Replace("<br>", "\n"), bookPanelDatas[i - 1].topTxt, bookPanelDatas[i].txt.Replace("<br>", "\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("<br>", "\n"), "",i+1,i+2);
AddPaper_Txt(bookPro, bookPanelDatas[i].txt.Replace("<br>", "\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<Text>("bookTopText").text = frontTopText;
frontPage.FindFirst<Text>("bookText").text = frontTxt;
frontPage.FindFirst<Text>("numText").text = frontNum.ToString();
GameObject backPage = Instantiate(BackPagePrefab);
backPage.FindFirst<Text>("bookTopText").text = backTopText;
backPage.FindFirst<Text>("bookText").text = backTxt;
backPage.FindFirst<Text>("numText").text = backNum.ToString();
frontPage.transform.SetParent(book.transform, false);

Binary file not shown.

View File

@ -1,3 +1,3 @@
2025/11/28 09:18:21
80580f9047ae7f4bd0325a05c2f5cdaa
U}õ•pu<^Ò<ó^‡oÞJ«Œ¼“e‰Çƒ©#=bãC]É㋽&KáJ|·ÈYøÚi8 Û/s(dˆˆíTñ{¦€½zuˆã+ktïL3Pß+ö~׫8Þ|Ê?”Øö¹˜×=Vi(H_üåFê!.©lr[us(‚ºò¨ÓÅÜ©ð1T÷
2026/01/04 14:58:38
3dea935fd3a1ead6af9393bb07c8f238
£…tkŠí#±xgüb ?ÔÙÓÎqøäCE¸åmiøœ<C3B8># ümú0h%xr qÎ2ΧºBä'`.Ãâ<C383> Þ¯+_ðtÄ4ïä\dÞAv±„•¾j5N•ùÿLÇ»Úh<¨ùbš»8Â%¥—i>=»ù¦¨¶‡úœkÃÉÜ!ûеWÛ£ðN—ú¨¿|J>ÚlD•ú±¾,Ê.4<EFBFBD>Ú