refactor(clue): 移除废弃线索板与旧打孔带实现

Made-with: Cursor
This commit is contained in:
2026-03-30 15:58:09 +08:00
parent f3f9ecb57f
commit 21111aa1d9
34 changed files with 0 additions and 24289 deletions
File diff suppressed because it is too large Load Diff
-833
View File
@@ -1,833 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &380188843586696145
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 45499603671335862}
- component: {fileID: 3651226432689433895}
- component: {fileID: 9221536178847927281}
m_Layer: 5
m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &45499603671335862
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380188843586696145}
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: 4993650456917624668}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 100, y: 25}
m_SizeDelta: {x: 200, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3651226432689433895
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380188843586696145}
m_CullTransparentMesh: 1
--- !u!114 &9221536178847927281
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 380188843586696145}
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: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &1403825789444272643
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1604617519185134939}
- component: {fileID: 537567991504675450}
- component: {fileID: 5462769473746124571}
m_Layer: 5
m_Name: Image (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &1604617519185134939
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1403825789444272643}
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: 3149611074960643346}
m_Father: {fileID: 4993650456917624668}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -100, y: 25}
m_SizeDelta: {x: 200, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &537567991504675450
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1403825789444272643}
m_CullTransparentMesh: 1
--- !u!114 &5462769473746124571
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1403825789444272643}
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: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &2260198552944312515
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6036857918381590041}
- component: {fileID: 4039091455881796258}
- component: {fileID: 3949314020793139242}
- component: {fileID: 565462480347658120}
m_Layer: 5
m_Name: ClueItemPrefab
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6036857918381590041
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2260198552944312515}
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: 4993650456917624668}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 400, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!225 &4039091455881796258
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2260198552944312515}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 1
m_BlocksRaycasts: 1
m_IgnoreParentGroups: 0
--- !u!114 &3949314020793139242
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2260198552944312515}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5d5f46e915536ee40a8c605a443e9584, type: 3}
m_Name:
m_EditorClassIdentifier:
clueImageUI: {fileID: 7075144331494489462}
categoryText: {fileID: 3999551045264380763}
nameText: {fileID: 3293312212471079921}
stateText: {fileID: 8192227228283879121}
used: 0
finished: {fileID: 0}
--- !u!114 &565462480347658120
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2260198552944312515}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d792e0af9bafc174d8a2566cf81b2c6a, type: 3}
m_Name:
m_EditorClassIdentifier:
isFavorited: 0
--- !u!1 &4124022480957499492
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4993650456917624668}
- component: {fileID: 8329269373128324355}
- component: {fileID: 7075144331494489462}
m_Layer: 5
m_Name: tapeImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4993650456917624668
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4124022480957499492}
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: 7924894876819984995}
- {fileID: 45499603671335862}
- {fileID: 1604617519185134939}
- {fileID: 6887531889344103689}
m_Father: {fileID: 6036857918381590041}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8329269373128324355
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4124022480957499492}
m_CullTransparentMesh: 1
--- !u!114 &7075144331494489462
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4124022480957499492}
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: -712470632465708247, guid: 57ad94bfc04c808478f030b46c094b63, 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 &6902410728416992151
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6293641014105233408}
- component: {fileID: 3502239096339888384}
- component: {fileID: 7847353110780076503}
m_Layer: 5
m_Name: Soruce
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6293641014105233408
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6902410728416992151}
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: 6887531889344103689}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &3502239096339888384
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6902410728416992151}
m_CullTransparentMesh: 1
--- !u!114 &7847353110780076503
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6902410728416992151}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: "\u5DF2\u770B\u8FC7"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_sharedMaterial: {fileID: -6659093157667844055, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 28
m_fontSizeBase: 28
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &7533127136812826032
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3149611074960643346}
- component: {fileID: 7442249389942683591}
- component: {fileID: 3999551045264380763}
m_Layer: 5
m_Name: Soruce
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3149611074960643346
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7533127136812826032}
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: 1604617519185134939}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &7442249389942683591
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7533127136812826032}
m_CullTransparentMesh: 1
--- !u!114 &3999551045264380763
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7533127136812826032}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: New Text
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_sharedMaterial: {fileID: -6659093157667844055, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4278190080
m_fontColor: {r: 0, g: 0, b: 0, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 28
m_fontSizeBase: 28
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!1 &7643179123736237062
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7924894876819984995}
- component: {fileID: 8499524202528292966}
- component: {fileID: 7622331551344773496}
- component: {fileID: 3293312212471079921}
m_Layer: 5
m_Name: Name
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7924894876819984995
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7643179123736237062}
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: 4993650456917624668}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -100, y: 55.8}
m_SizeDelta: {x: -200, y: -100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8499524202528292966
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7643179123736237062}
m_CullTransparentMesh: 1
--- !u!114 &7622331551344773496
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7643179123736237062}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: New Text
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_sharedMaterial: {fileID: -6659093157667844055, guid: f242fb3dde1933640859f1c54591c9c8, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4278190080
m_fontColor: {r: 0, g: 0, b: 0, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 28
m_fontSizeBase: 28
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_enableWordWrapping: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 1
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 6.3168945, z: -199.4336, w: 7.2193604}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!114 &3293312212471079921
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7643179123736237062}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 56eb0353ae6e5124bb35b17aff880f16, type: 3}
m_Name:
m_EditorClassIdentifier:
m_StringReference:
m_TableReference:
m_TableCollectionName: GUID:994c69bf4b2403043bc9562f2d24ee56
m_TableEntryReference:
m_KeyId: 9444022983593984
m_Key:
m_FallbackState: 0
m_WaitForCompletion: 0
m_LocalVariables: []
m_FormatArguments: []
m_UpdateString:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 7622331551344773496}
m_TargetAssemblyTypeName: TMPro.TMP_Text, Unity.TextMeshPro
m_MethodName: set_text
m_Mode: 0
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName:
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 1
references:
version: 2
RefIds: []
--- !u!1 &8192227228283879121
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6887531889344103689}
- component: {fileID: 1106130173170497156}
- component: {fileID: 6603602921383697454}
m_Layer: 5
m_Name: Image (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &6887531889344103689
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8192227228283879121}
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: 6293641014105233408}
m_Father: {fileID: 4993650456917624668}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: -100, y: -71}
m_SizeDelta: {x: 200, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1106130173170497156
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8192227228283879121}
m_CullTransparentMesh: 1
--- !u!114 &6603602921383697454
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8192227228283879121}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 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: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
-48
View File
@@ -1,48 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &6814349267378530968
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8677370814205024500}
- component: {fileID: 3510766766159879648}
m_Layer: 0
m_Name: ClueManager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &8677370814205024500
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6814349267378530968}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 423.91736, y: 523.9112, z: -10.787967}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3510766766159879648
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6814349267378530968}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5dd927405fcdda54fbc837069abc360d, type: 3}
m_Name:
m_EditorClassIdentifier:
cluePrefab: {fileID: 6285052556030698184, guid: 39448b90e97cec44b86e851370a1335b, type: 3}
canvas: {fileID: 0}
-127
View File
@@ -1,127 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &4957033186383070062
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 848385094971918041}
- component: {fileID: 2957654739483189740}
- component: {fileID: 636650076073895251}
m_Layer: 5
m_Name: tapeImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &848385094971918041
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4957033186383070062}
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: 7660880866045446374}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &2957654739483189740
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4957033186383070062}
m_CullTransparentMesh: 1
--- !u!114 &636650076073895251
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4957033186383070062}
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: 3685dd63737dbfb4c90fa8f5cd771c81, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &9180733108289175355
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7660880866045446374}
- component: {fileID: 8709568801333991386}
m_Layer: 5
m_Name: ClueSlot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7660880866045446374
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9180733108289175355}
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: 848385094971918041}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 150, y: 150}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &8709568801333991386
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9180733108289175355}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bd0b32d1dec841247984791d91171633, type: 3}
m_Name:
m_EditorClassIdentifier:
isOccupied: 0
-113
View File
@@ -1,113 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &2424662228528623556
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8538217932967146522}
m_Layer: 5
m_Name: PunchTapeSlot
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &8538217932967146522
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2424662228528623556}
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: 3565815748221874198}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7880595094219686492
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3565815748221874198}
- component: {fileID: 5287806630649122575}
- component: {fileID: 572035747791246611}
m_Layer: 5
m_Name: tapeImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3565815748221874198
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7880595094219686492}
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: 8538217932967146522}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 500, y: 200}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &5287806630649122575
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7880595094219686492}
m_CullTransparentMesh: 1
--- !u!114 &572035747791246611
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7880595094219686492}
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: 3685dd63737dbfb4c90fa8f5cd771c81, type: 3}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
File diff suppressed because it is too large Load Diff
-8
View File
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 5c28204e99201e14da50dd56d0ae803f
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
-27
View File
@@ -1,27 +0,0 @@
using AibisDream.Framework;
using UnityEngine;
public enum ClueType
{
PunchTape,
ImageClue,
// 添加其他类型
}
public abstract class Clue
{
public string Category { get; set; }
public string ClueName { get; set; }
public string YarnNodeName => LocalizationKit.GetL10NParamKey(ClueName);
public string LocaleClueName => LocalizationKit.LocalizeParam(ClueName);
public ClueType ClueType { get; protected set; }
public Clue(string category, string name)
{
Category = category;
ClueName = name;
//PuzzleIndex=puzzleIndex;
}
public abstract void Display(ClueItem clueitem);
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a06f6ba4e40a56142bc2b8d327f11c92
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-265
View File
@@ -1,265 +0,0 @@
using System.Collections;
using System.Collections.Generic;
//using System.Diagnostics;
using AibisDream;
using MeadowGames.UINodeConnect4;
using UnityEngine;
using Yarn.Unity;
using RainbowArt.CleanFlatUI;
using UnityEngine.UI;
using DG.Tweening;
using MeadowGames.UINodeConnect4.GraphicRenderer;
using System;
public class ClueBaordNew : MonoBehaviour
{
private GraphManager gm;
public List<GameObject> nodeLists;
public Notification ClueBoardNotification;
private Connection currentConnection;
private List<Connection> connectionList;
private bool isTriggerDialogue=true;
public ScrollRect scrollRect; // ScrollView的ScrollRect组件
public RectTransform contentRectTransform; // Content的RectTransform
public float padding = 10f; // 节点的额外间隔
public float scrollDuration = 1.5f; // 滚动动画持续时间
public float scaleDuration = 1f; // 缩放动画持续时间
void Start()
{
gm=GetComponent<GraphManager>();
gm.OnConnectionAdded += CheckConnection;
}
// Update is called once per frame
void Update()
{
}
[YarnCommand("ScrollToNode")]
public IEnumerator ScrollToNode(string nodeName)
{
if (scrollRect == null || contentRectTransform == null)
{
Debug.LogError("ScrollRect or ContentRectTransform is not assigned!");
yield break;
}
// 获取目标节点
Transform targetNode = GetNodeGameObject(nodeName)?.transform;
if (targetNode == null)
{
Debug.LogWarning($"Node {nodeName} not found!");
yield break;
}
RectTransform targetRectTransform = targetNode.GetComponent<RectTransform>();
if (targetRectTransform == null)
{
Debug.LogWarning($"Node {nodeName} does not have a RectTransform!");
yield break;
}
// **计算目标 Content 位置**
Vector3[] viewportCorners = new Vector3[4];
scrollRect.viewport.GetWorldCorners(viewportCorners);
Vector3[] contentCorners = new Vector3[4];
contentRectTransform.GetWorldCorners(contentCorners);
Vector3 targetWorldPosition = targetRectTransform.position;
Vector2 viewportCenter = (viewportCorners[0] + viewportCorners[2]) / 2f;
Vector2 offset = (Vector2)targetWorldPosition - viewportCenter;
Vector2 targetContentPos = contentRectTransform.anchoredPosition - offset;
// **动画处理**
float zoomScale = 1.5f; // 放大倍数
Sequence scrollSequence = DOTween.Sequence();
// 平滑移动 Content
scrollSequence.Append(contentRectTransform.DOAnchorPos(targetContentPos, scrollDuration).SetEase(Ease.InOutQuad));
// 同时缩放目标节点
scrollSequence.Join(targetRectTransform.DOScale(Vector3.one * zoomScale, scaleDuration).SetEase(Ease.OutBack));
// 动画完成后恢复缩放
scrollSequence.Append(targetRectTransform.DOScale(Vector3.one, scaleDuration).SetEase(Ease.OutBack));
yield return scrollSequence.WaitForCompletion();
}
[YarnCommand("SetNodeState")]
public IEnumerator ActiveNodeToBoard(string nodeID,bool isactive,bool skipAnimation=false)
{
GameObject targetNode=nodeLists.Find(node => node.name == nodeID);
if (targetNode == null)
{
Debug.LogWarning($"Node {nodeID} not found!");
yield break;
}
targetNode.gameObject.SetActive(isactive);
if(skipAnimation)
{
yield break;
}
RectTransform targetRectTransform = targetNode.GetComponent<RectTransform>();
if (targetRectTransform == null)
{
Debug.LogWarning($"Node {nodeID} does not have a RectTransform!");
yield break;
}
targetRectTransform.DOScale(Vector3.one * 1.5f, scaleDuration).SetEase(Ease.OutBack);
// 等待动画完成
yield return new WaitForSeconds(scrollDuration);
// 恢复目标节点缩放
targetRectTransform.DOScale(Vector3.one, scaleDuration).SetEase(Ease.OutBack);
}
[YarnCommand("NodeInit")]
public void NodeInit(string nodeID,bool isactive)
{
GameObject targetNode=nodeLists.Find(node => node.name == nodeID);
if (targetNode == null)
{
Debug.LogWarning($"Node {nodeID} not found!");
return;
}
targetNode.gameObject.SetActive(isactive);
}
// [YarnCommand("SetNodeState")]
// public void ActiveNodeToBoard(string nodeID,bool isactive)
// {
// nodeLists.Find(node => node.name == nodeID).gameObject.SetActive(isactive);
// }
[YarnCommand("ClearAllNode")]
public void ClearAllNode()
{
for (int i = gm.localConnections.Count - 1; i >= 0; i--)
{
gm.localConnections[i].Remove();
}
for (int i = nodeLists.Count - 1; i >= 0; i--)
{
nodeLists[i].SetActive(false);
}
// foreach(Connection line in gm.localConnections)
// {
// line.Remove();
// }
// foreach(GameObject node in nodeLists)
// {
// node.SetActive(false);
// }
}
[YarnCommand("CreateConnection")]
public void CreateConnection(string StartNode,string EndNode)
{
Port start= GetNode(StartNode).ports[1];
Port end= GetNode(EndNode).ports[0];
Connection newConnection=Connection.NewConnection(start,end);
newConnection.DisableClick=false;
newConnection.EnableDrag=false;
newConnection.EnableHover=false;
newConnection.line.color=Color.red;
}
public void ExitClueBoard()
{
DialogController.Instance.StartDialogNode("退出ClueBoard");
}
public Node GetNode(string nodeID)
{
return gm.localNodes.Find(node => node.ID == nodeID);
}
public GameObject GetNodeGameObject(string nodeID)
{
return nodeLists.Find(node => node.name == nodeID);
}
[YarnCommand("SetIsTriggerDialogueWhenConnect")]
public void SetIsTriggerDialogueWhenConnect(bool isTrigger)
{
isTriggerDialogue=isTrigger;
}
[YarnCommand("ChangeConnectionVisual")]
public IEnumerator ChangeConnectionVisual(string startNode,float speed,string color)
{
Connection Targetconnection=gm.localConnections.Find(connection => connection.port0.node.ID == startNode);
if (Targetconnection == null)
{
Debug.LogWarning($"Connection start with {startNode} not found!");
yield break;
}
Targetconnection.line.animation.isActive=true;
Targetconnection.line.animation.shape=Shape.Type.Square;
Targetconnection.line.animation.speed=speed;
Targetconnection.line.animation.size=30;
switch (color)
{
case "Blue":
Targetconnection.line.animation.color=Color.blue;
break;
}
Targetconnection.line.animation.DrawLineAnimation(gm.lineRenderer,Targetconnection.line);
}
public void CheckConnection(Connection connection)
{
currentConnection=connection;
StorageSystem.Instance?.SetValue("$StartNode",connection.port0.node.ID);
StorageSystem.Instance?.SetValue("$EndNode",connection.port1.node.ID);
if(isTriggerDialogue)
{
DialogController.Instance.StartDialogNode("检查ClueBoard");
}
}
[YarnCommand("ConnectionCantBreak")]
public void SetConnectionProperties()
{
if (currentConnection == null)
{
Debug.LogWarning("Connection not found.");
return;
}
currentConnection.DisableClick=false;
currentConnection.EnableDrag=false;
currentConnection.EnableHover=false;
currentConnection.line.color=Color.red;
}
// [YarnCommand("AddNodeConnection")]
// public void CreateConnection(string starNode,int startPort,string endNode,int endPort)
// {
// Node start= GetNode(starNode);
// Node end= GetNode(endNode);
// Connection newConnection=start.ports[startPort].ConnectTo(end.ports[endPort]);
// newConnection.DisableClick=false;
// newConnection.EnableDrag=false;
// gm.UnselectAllElements();
// newConnection.DisableClick=false;
// newConnection.EnableDrag=false;
// newConnection.EnableHover=false;
// newConnection.line.color=Color.green;
// //currentConnection=null;
// }
[YarnCommand("EnableQuestion")]
public void EnableQuestion(string nodeID)
{
GetNode(nodeID).transform.GetChild(2).gameObject.SetActive(true);
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: da9436bcd0acd514fac5e4c5ead6e810
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-8
View File
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: d32346823f335a14f935d442aa52a99c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
-100
View File
@@ -1,100 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Collections;
using DG.Tweening;
using TMPro;
using AibisDream;
using Yarn.Unity;
using System;
public class ClueBoardManager : MonoBehaviour
{
// 单例实例
public static ClueBoardManager Instance { get; private set; }
public Canvas clueBoardUI; // ClueBoard UI的GameObject
public GameObject iamgePointer; // ClueBoard UI的GameObject
[SerializeField] private Button toggleButton; // 开启/关闭ClueBoard的按钮
private RectTransform clueBoardRectTransform; // ClueBoard的RectTransform
private List<ClueSlotBase> clueSlots = new List<ClueSlotBase>(); // 当前存在的所有ClueSlot
private int currentStep = 0; // 当前步骤编号
private int maxStep = 3; // 当前步骤编号
private bool isBoardOpen = false;
private Vector2 hiddenPosition; // ClueBoard隐藏时的位置
private Vector2 visiblePosition; // ClueBoard显示时的位置
public event Action OnClueBoardOpen;
public event Action OnClueBoardClose;
[YarnCommand("wait_for_ClueBoard_close")]
public IEnumerator WaitForClose()
{
// 这里等待关闭按钮点击事件
while (isBoardOpen)
{
yield return null; // 每帧检查一次
}
}
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject); // 确保单例唯一性
return;
}
Instance = this;
//DontDestroyOnLoad(gameObject); // 如果需要跨场景保留
}
private void Start()
{
clueBoardRectTransform = clueBoardUI.transform.GetComponent<RectTransform>();
clueBoardUI.enabled = false;
iamgePointer.GetComponent<Image>().enabled = false;
toggleButton.onClick.AddListener(ToggleClueBoard); // 绑定按钮事件
}
// 开启或关闭 ClueBoard
private void ToggleClueBoard()
{
Debug.Log("触发打开关闭诊疗面板");
if (isBoardOpen)
{
CloseClueBoard();
}
else
{
OpenClueBoard();
}
}
[YarnCommand("OpenClueBoard")]
public void OpenClueBoard()
{
clueBoardUI.enabled = true;
iamgePointer.GetComponent<Image>().enabled = true;
isBoardOpen = true;
OnClueBoardOpen?.Invoke();
// MouseCursorManager.Instance.ClueBoardIn();
}
[YarnCommand("CloseClueBoard")]
public void CloseClueBoard()
{
isBoardOpen = false;
clueBoardUI.enabled = false;
iamgePointer.GetComponent<Image>().enabled = false;
OnClueBoardClose?.Invoke();
// MouseCursorManager.Instance.ClueBoardOut();
}
[YarnCommand("SkipClueBoard")]
public void SkipClueBoard()
{
DialogController.Instance.StartDialogNode("SkipClueBoard");
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: e0093028f75bca0408902ce738d4d267
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-33
View File
@@ -1,33 +0,0 @@
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class ClueDisplay : MonoBehaviour
{
public TMP_Text categoryText;
public TMP_Text nameText;
// public Image clueImageUI; // 如果需要显示图片的话
private Clue clueData;
// 负责初始化并显示线索
public void Setup(Clue clue)
{
clueData = clue;
UpdateDisplay();
}
// 更新 UI 显示
private void UpdateDisplay()
{
if (categoryText != null) categoryText.text = "分类:" + clueData.Category;
if (nameText != null) nameText.text = "名称:" + clueData.ClueName;
// if (clueImageUI != null) clueImageUI.sprite = ...; // 如果有图片
}
// 如果需要获取 Clue 数据
public Clue GetClueData()
{
return clueData;
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1de038ee94452684eb5bbec9ece5c9c6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-42
View File
@@ -1,42 +0,0 @@
using UnityEngine;
using TMPro;
using System;
using DG.Tweening;
using Unity.VisualScripting;
using UnityEngine.UI;
public class ClueDisplayManager : MonoBehaviour
{
public RectTransform punchTapeCurrentPos;
private float punchTapeStartPosX;
[SerializeField] private TMP_Text nameText; // 用于显示名称
[SerializeField] private TMP_Text categoryText; // 用于显示分类
void Start()
{
punchTapeStartPosX=punchTapeCurrentPos.rect.width/2;
ResetClueDisplay();
}
// 用于初始化显示内容的方法
public void InitializeClueDisplay(string clueName,string category,Action onComplete = null)
{
punchTapeCurrentPos.anchoredPosition=new Vector2(punchTapeStartPosX,punchTapeCurrentPos.anchoredPosition.y);
nameText.text = clueName;
categoryText.text=category;
punchTapeCurrentPos.DOAnchorPosX(-punchTapeStartPosX,2f).SetEase(Ease.OutQuad).OnComplete(() =>
{
// 调用回调
onComplete?.Invoke();
});
}
public void ResetClueDisplay()
{
punchTapeCurrentPos.anchoredPosition=new Vector2(punchTapeStartPosX,punchTapeCurrentPos.anchoredPosition.y);
nameText.text = null;
categoryText.text=null;
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 9f6562a78d055f04aac6ccfb0b7fe989
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-134
View File
@@ -1,134 +0,0 @@
using UnityEngine;
using UnityEngine.EventSystems;
using Yarn.Unity;
using System;
public class ClueInteraction : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
{
private Transform originalParent;
public Transform OriginalParent => originalParent;
private Canvas canvas;
private ClueItem clueItem;
[HideInInspector]
public bool isFavorited = false; // 初始未收藏
private RectTransform rectTransform;
private Vector2 originalAnchorMin;
private Vector2 originalAnchorMax;
private Vector2 originalOffsetMin;
private Vector2 originalOffsetMax;
private Vector2 originalPivot;
private CursorMode cursorMode = CursorMode.Auto;
public event Action OnInteraction;
private bool isLocked=false;
private MemoryClueSlot slot;
private void Start()
{
canvas = GetComponentInParent<Canvas>();
clueItem = GetComponent<ClueItem>();
rectTransform = GetComponent<RectTransform>();
slot=FindObjectOfType<MemoryClueSlot>();
// 存储初始尺寸属性
StoreOriginalTransform();
}
private void StoreOriginalTransform()
{
originalParent = transform.parent;
originalAnchorMin = rectTransform.anchorMin;
originalAnchorMax = rectTransform.anchorMax;
originalOffsetMin = rectTransform.offsetMin;
originalOffsetMax = rectTransform.offsetMax;
originalPivot = rectTransform.pivot;
}
public void OnPointerEnter(PointerEventData eventData)
{
// 可以设置收藏夹样式的鼠标指针
// Cursor.SetCursor(favoriteCursor, Vector2.zero, cursorMode);
}
public void OnPointerExit(PointerEventData eventData)
{
Cursor.SetCursor(null, Vector2.zero, cursorMode);
}
public void OnPointerClick(PointerEventData eventData)
{
// if (!isFavorited||isLocked) return;
// transform.position = Input.mousePosition+new Vector3(0,200,0);
// transform.rotation = Quaternion.Euler(0, 0, -90f);
}
public void OnBeginDrag(PointerEventData eventData)
{
if (!isFavorited||isLocked) return;
transform.SetParent(canvas.transform);
GetComponent<CanvasGroup>().blocksRaycasts = false;
slot.coverOpen.enabled=true;
slot.coverClose.enabled=false;
}
public void OnDrag(PointerEventData eventData)
{
if (!isFavorited||isLocked) return;
transform.position = Input.mousePosition+new Vector3(0,200,0);
transform.rotation = Quaternion.Euler(0, 0, -90f);
}
public void OnEndDrag(PointerEventData eventData)
{
if (!isFavorited||isLocked) return;
if (transform.parent == canvas.transform)
{
ReturnToOriginalPosition();
}
GetComponent<CanvasGroup>().blocksRaycasts = true;
}
public void ReturnToOriginalPosition()
{
slot.coverOpen.enabled=false;
slot.coverClose.enabled=true;
isLocked=false;
transform.rotation = Quaternion.Euler(0, 0, 0);
transform.SetParent(originalParent);
rectTransform.anchorMin = originalAnchorMin;
rectTransform.anchorMax = originalAnchorMax;
rectTransform.offsetMin = originalOffsetMin;
rectTransform.offsetMax = originalOffsetMax;
rectTransform.pivot = originalPivot;
transform.localPosition = Vector3.zero; // 重置为初始局部位置
}
public void SetClueParentAndPosition(Transform newParent)
{
isLocked=true;
Destroy(this.gameObject);
// rectTransform.SetParent(newParent);
// // rectTransform.anchorMin = Vector2.zero;
// // rectTransform.anchorMax = Vector2.one;
// // rectTransform.offsetMin = Vector2.zero;
// // rectTransform.offsetMax = Vector2.zero;
// rectTransform.pivot = new Vector2(0.5f, 0.5f);
// transform.localPosition = Vector3.zero;
}
public void SetIsFavorited(bool isFavorited)
{
this.isFavorited = isFavorited;
}
public void SetIsLock(bool isLocked)
{
this.isLocked = isLocked;
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: d792e0af9bafc174d8a2566cf81b2c6a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-35
View File
@@ -1,35 +0,0 @@
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using UnityEngine.Localization.Components;
public class ClueItem : MonoBehaviour
{
public Image clueImageUI;
public TMP_Text categoryText;
public LocalizeStringEvent nameText;
public GameObject stateText;
[HideInInspector]
public bool used=false;
private Clue clueData;
public GameObject finished;
public void Setup(Clue clue)
{
clueData = clue;
if(used)
{
clueImageUI.color=Color.grey;
stateText.SetActive(true);
}
clueData.Display(this);
}
public Clue GetClueData()
{
return clueData;
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 5d5f46e915536ee40a8c605a443e9584
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-109
View File
@@ -1,109 +0,0 @@
using UnityEngine;
using Yarn.Unity;
using RainbowArt.CleanFlatUI;
using AibisDream.Framework;
public class ClueManager : MonoBehaviour
{
public GameObject punchTapecluePrefab; // 通用线索预制件
public GameObject imageCluePrefab;
public Canvas canvas; // UI画布
private ClueInteraction currentClueInteraction;
private GameObject currentClue;
//public Notification FavouriteNotification;
public Notification TopNotification;
//public Notification ClueBoardNotification;
ClueBaordNew clueBaord;
// MouseCursorManager mouseManager;
void Start()
{
clueBaord = FindObjectOfType<ClueBaordNew>();
}
public void GetPunchTape()
{
// 动态生成打孔带的数据
string category = "视觉";
string name = "sky";
//Sprite image = GetRandomPunchTapeSprite();
string memoryIndex = "blue";
// 实例化打孔带线索
PunchTape punchTape = new PunchTape(category, name, memoryIndex);
GameObject clueGO = Instantiate(punchTapecluePrefab, canvas.transform);
ClueItem clueItem = clueGO.GetComponent<ClueItem>();
clueItem.Setup(punchTape);
}
//用于生成打孔带的函数
[YarnCommand("generate_PunchTape")]
public void GeneratePunchTapeWindow(string clueName, string category, string memoryIndex,
bool directlyAddToFavorites = false)
{
PunchTape punchTape = new PunchTape(category, clueName, memoryIndex);
if (directlyAddToFavorites)
{
FavoritesManager.Instance.AddClue(punchTape);
return;
}
GameObject clueGO = Instantiate(punchTapecluePrefab, canvas.transform);
ClueItem clueItem = clueGO.GetComponent<ClueItem>();
currentClue = clueGO;
clueItem.Setup(punchTape);
}
[YarnCommand("CollectionClue")]
public void EnabeClueInteraction(string nodeID = null)
{
if (nodeID != null)
{
//Debug.Log("收藏线索版成功!");
//clueBaord.CreateNode(nodeID);
return;
}
// if(currentClue==null)
// {
// Debug.Log("收藏线索版成功!");
// clueBaord.CreateNode(nodeID);
// return;
// }
ClueItem clueItem = currentClue.GetComponent<ClueItem>();
Clue clue = clueItem.GetClueData();
ClueInteraction clueInteraction = currentClue.GetComponent<ClueInteraction>();
if (clue.ClueType == ClueType.PunchTape)
{
FavoritesManager.Instance.AddClue(clueItem.GetClueData());
Destroy(currentClue.gameObject);
Debug.Log("收藏文件夹成功!");
clueInteraction.isFavorited = true;
currentClue = null;
}
else
{
Debug.Log("收藏线索版成功!");
//clueBaord.CreateNode(clue.ClueName);
Destroy(currentClue.gameObject);
currentClue = null;
}
}
[YarnCommand("ShowNotification")]
public void ShowNotification(string Title, string message)
{
TopNotification.TitleValue = Title;
TopNotification.DescriptionValue = message;
TopNotification.ShowNotification();
//currentClueInteraction.OnInteraction-=ShowFavouriteNotification;
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 5dd927405fcdda54fbc837069abc360d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-103
View File
@@ -1,103 +0,0 @@
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;
using Yarn.Unity;
using AibisDream;
public class ClueSlot : MonoBehaviour, IDropHandler
{
public ClueType expectedClueType;
private MemoryProcess memoryManager;
private PunchTape punchTape;
private ClueInteraction interaction;
[HideInInspector]
public bool isOccupied=false;
//public string memoryIndex; // 存储的memory string
void Start()
{
memoryManager=FindObjectOfType<MemoryProcess>();
interaction=null;
punchTape=null;
}
public void OnDrop(PointerEventData eventData)
{
if(isOccupied)
{
Debug.Log("is using");
return;
}
isOccupied=true;
ClueItem clueItem = eventData.pointerDrag.GetComponent<ClueItem>();
if (clueItem != null)
{
Clue clue = clueItem.GetClueData();
interaction=clueItem.GetComponent<ClueInteraction>();
Debug.Log(clue.ClueType+" "+expectedClueType);
if (clue!=null && clue.ClueType == expectedClueType&&interaction!=null)
{
FavoritesManager.Instance.RemoveClue(clue);
Debug.Log("success");
// 插入成功
// 将线索项放置到插槽中
interaction.SetClueParentAndPosition(transform);
//clueItem.transform.SetParent(transform);
//clueItem.transform.position = transform.position;
if (clue is PunchTape)
{
punchTape= clue as PunchTape;
PlayMemory(punchTape);
}
// 播放记忆
// 从收藏夹移除线索
//FavoritesManager.Instance.RemoveClue(clue);
// 销毁线索项
//Destroy(clueItem.gameObject, 1f); // 延迟销毁,方便展示动画
}
else
{
interaction.ReturnToOriginalPosition();
// 类型不匹配,返回原位
// clueItem.transform.SetParent(clueItem.OriginalParent);
// clueItem.transform.position = clueItem.OriginalParent.position;
}
}
}
private void PlayMemory(Clue clue)
{
// 根据线索的记忆索引播放对应的记忆
if (clue is PunchTape)
{
PunchTape punchTape = clue as PunchTape;
string memoryIndex = punchTape.MemoryIndex;
// 播放对应的记忆内容
Debug.Log("播放记忆:" + memoryIndex);
StartCoroutine(memoryManager.SearchMemory(punchTape));
//DialogController.Instance.StartDialogNode(memoryIndex);
// 您可以在这里实现播放记忆的具体逻辑
}
}
// [YarnCommand("Release_Slot")]
public void ReleaseSlot()
{
isOccupied=false;
interaction.ReturnToOriginalPosition();
interaction=null;
punchTape=null;
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 092522a3461fc814a8b9337827332dc4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-140
View File
@@ -1,140 +0,0 @@
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using AibisDream;
using AibisDream.Kit;
public class ClueSlotBase : MonoBehaviour, IDropHandler
{
public Image filmImage; // 新增的胶片Image
public Image RoateImage; // 新增的胶片Image
private Transform filmStartPos;
protected ClueType expectedClueType; // 期望的 Clue 类型
protected ClueInteraction interaction; // Clue 的交互
protected RectTransform OriginalTransform; // Clue 的交互
[HideInInspector]
public ClueItem currentClueItem; // 当前插入的 ClueItem
public Image punchTapeImage;
public Image coverClose;
public Image coverOpen;
private RectTransform punchtapeStartpos;
[HideInInspector]
public bool isOccupied = false; // 插槽是否已占用
[HideInInspector]
public bool isLocked = false; // 插槽是否已占用
protected virtual void Start()
{
currentClueItem = null;
coverClose.enabled=true;
coverOpen.enabled=false;
punchTapeImage.enabled=false;
punchtapeStartpos=punchTapeImage.rectTransform;
//slotFrame.color=Color.white;
filmStartPos=filmImage.rectTransform;
}
public void SetSlotCorrect()
{
SetSlotLockState(true);
}
public void OnDrop(PointerEventData eventData)
{
ClueItem clueItem = eventData.pointerDrag.GetComponent<ClueItem>();
if (clueItem != null)
{
Clue clue = clueItem.GetClueData();
interaction = clueItem.GetComponent<ClueInteraction>();
if (clue != null && interaction != null&&!isOccupied)
{
interaction.SetClueParentAndPosition(transform);
// 更新当前的 ClueItem
currentClueItem = clueItem;
isOccupied = true;
punchTapeImage.enabled=true;
// AudioManager.RandomPlayInteraction("punchtape");
AudioManager.Instance.PlaySfx("event:/ActionFB/mem_insert");
StartFilmAnimation();
FavoritesManager.Instance.CloseFavorites();
punchTapeImage.rectTransform.DOAnchorPosY(-473f,4f)
.OnComplete(() =>
{
punchTapeImage.enabled=false;
punchTapeImage.rectTransform.DOAnchorPosY(-3f,0.1f);
OnClueInserted(clue);
StopFilmAnimation();
});
}
else
{
// 如果类型不匹配,返回 ClueItem 到原位
interaction?.ReturnToOriginalPosition();
}
}
}
// 释放插槽时调用
public virtual void ReleaseSlot()
{
Debug.Log("释放记忆插槽");
coverClose.enabled=false;
coverOpen.enabled=true;
isOccupied = false;
currentClueItem = null;
interaction = null;
filmImage.rectTransform.localPosition=filmStartPos.localPosition;
}
// 将 ClueItem 返回到集合的逻辑
protected void ReturnClueToCollection(ClueItem clueItem)
{
// 这里调用 ClueInteraction 的返回逻辑
if (clueItem != null)
{
ClueInteraction clueInteraction = clueItem.GetComponent<ClueInteraction>();
clueInteraction?.ReturnToOriginalPosition(); // 返回到原位的逻辑
FavoritesManager.Instance.AddClue(clueItem.GetClueData());
// 你也可以在这里添加额外的逻辑来处理集合的更新
}
}
// 插入线索时调用的虚方法,子类可以重写此方法以实现特定功能
protected virtual void OnClueInserted(Clue clue)
{
//FavoritesManager.Instance.RemoveClue(clue);
// 默认不做任何操作
Debug.Log("Clue inserted in base slot.");
}
public void SetSlotLockState(bool lockState)
{
isLocked=lockState;
}
private void StartFilmAnimation()
{
// 使用 DOTween 实现胶片的循环移动
filmImage.rectTransform.DOLocalMoveX(-494f, 1f)
.SetLoops(-1, LoopType.Restart)
.SetEase(Ease.Linear);
RoateImage.rectTransform.DORotate(new Vector3(0, 0, 360), 1f, RotateMode.FastBeyond360)
.SetLoops(-1, LoopType.Restart)
.SetEase(Ease.Linear);
}
private void StopFilmAnimation()
{
// 停止胶片动画
filmImage.rectTransform.DOKill();
RoateImage.rectTransform.DOKill();
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: bd0b32d1dec841247984791d91171633
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-156
View File
@@ -1,156 +0,0 @@
using UnityEngine;
using System.Collections.Generic;
using DG.Tweening;
using AibisDream.Framework;
using AibisDream;
using System;
using System.Collections;
public class FavoritesManager : MonoBehaviour
{
public static FavoritesManager Instance;
private readonly ClueData _clueData = new();
public GameObject favoritesUI; // 收藏夹UI
private RectTransform favoritesUIRectTransform;
public Transform punchTapeContent; // 打孔带分类的Content
public GameObject clueItemPrefab; // 收藏夹中线索Item的预制件
public GameObject imageClueItemPrefab; // 收藏夹中线索Item的预制件
public GameObject punchTapePanel; // 打孔带分类面板
private Vector2 hiddenPosition; // 收藏夹隐藏时的位置
private Vector2 visiblePosition; // 收藏夹显示时的位置
private void Awake()
{
Instance = this;
StorageSystem.Instance.RegisterData(_clueData);
// 添加加载逻辑
_clueData.LoadEvent += LoadData;
}
private void LoadData(ClueData cluedata)
{
UpdateFavoritesUI();
}
private void Start()
{
favoritesUIRectTransform = favoritesUI.GetComponent<RectTransform>();
hiddenPosition = new Vector2(favoritesUIRectTransform.anchoredPosition.x * 2,
favoritesUIRectTransform.anchoredPosition.y);
visiblePosition = new Vector2(favoritesUIRectTransform.anchoredPosition.x, 0);
// 设置收藏夹的初始位置为隐藏
favoritesUIRectTransform.anchoredPosition = hiddenPosition;
favoritesUI.SetActive(false);
ShowPunchTapeFavorites();
}
public void AddClue(Clue clue)
{
if (clue is PunchTape punchTape)
{
if (!_clueData.punchTapeFavorites.Contains(punchTape))
{
_clueData.punchTapeFavorites.Add(punchTape);
UpdateFavoritesUI();
}
}
}
public void RemoveClue(Clue clue)
{
if (clue is PunchTape punchTape)
{
if (_clueData.punchTapeFavorites.Contains(punchTape))
{
_clueData.punchTapeFavorites.Remove(punchTape);
UpdateFavoritesUI();
}
}
}
private void UpdateFavoritesUI()
{
// 清空现有的UI元素
foreach (Transform child in punchTapeContent)
{
Destroy(child.gameObject);
}
// 重新创建剩余线索的UI
foreach (PunchTape clue in _clueData.punchTapeFavorites)
{
GameObject clueItemGO;
ClueItem clueItem;
ClueInteraction clueInteraction;
// 根据 ClueType 实例化不同的预制件
if (clue.ClueType == ClueType.PunchTape)
{
clueItemGO = Instantiate(clueItemPrefab, punchTapeContent);
}
else if (clue.ClueType == ClueType.ImageClue)
{
clueItemGO = Instantiate(imageClueItemPrefab, punchTapeContent);
}
else
{
continue; // 如果有其他 ClueType,不处理并继续
}
// 设置 ClueItem 和 ClueInteraction
clueItem = clueItemGO.GetComponent<ClueItem>();
clueInteraction = clueItemGO.GetComponent<ClueInteraction>();
clueItem.Setup(clue);
clueInteraction.SetIsFavorited(true);
}
}
public void OpenFavorites()
{
UpdateFavoritesUI();
favoritesUI.SetActive(true);
ShowPunchTapeFavorites();
// 用DOTween从右侧移动到可见区域
favoritesUIRectTransform.DOAnchorPos(visiblePosition, 0.5f); // 移动动画,持续0.5秒
}
public void CloseFavorites()
{
UpdateFavoritesUI();
// 用DOTween移动回右侧屏幕外
favoritesUIRectTransform.DOAnchorPos(hiddenPosition, 0.5f).OnComplete(() =>
{
favoritesUI.SetActive(false); // 移动完成后隐藏UI
});
}
private void ShowPunchTapeFavorites()
{
UpdateFavoritesUI();
punchTapePanel.SetActive(true);
}
}
public class ClueData : IData
{
public readonly List<PunchTape> punchTapeFavorites = new();
public event Action<ClueData> LoadEvent;
public IEnumerator Load()
{
LoadEvent?.Invoke(this);
yield break;
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a84298a2467e2934fa5e8c60405a2834
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-53
View File
@@ -1,53 +0,0 @@
using System.Drawing;
using UnityEngine;
using DG.Tweening;
public class MemoryClueSlot : ClueSlotBase
{
private MemoryProcess memoryManager;
[HideInInspector] public PunchTape punchTape;
protected override void Start()
{
base.Start(); // 初始化基类中的内容
memoryManager = FindObjectOfType<MemoryProcess>();
expectedClueType = ClueType.PunchTape;
}
// 重写基类的 OnClueInserted 方法,处理播放记忆的逻辑
protected override void OnClueInserted(Clue clue)
{
punchTape = clue as PunchTape;
coverClose.enabled = true;
coverOpen.enabled = false;
PlayMemory(punchTape);
FavoritesManager.Instance.RemoveClue(clue);
}
private void PlayMemory(PunchTape punchTape)
{
if (punchTape != null)
{
string memoryIndex = punchTape.MemoryIndex;
Debug.Log("播放记忆:" + memoryIndex);
StartCoroutine(memoryManager.SearchMemory(punchTape));
}
}
private void StartFilmAnimation()
{
// 使用 DOTween 实现胶片的循环移动
filmImage.rectTransform.DOLocalMoveX(-1256f, 1f)
.SetLoops(-1, LoopType.Restart)
.SetEase(Ease.Linear);
}
private void StopFilmAnimation()
{
// 停止胶片动画
filmImage.rectTransform.DOKill();
// 重置胶片位置
filmImage.rectTransform.localPosition = Vector3.zero;
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 08ace7d1cbb872b49a73a914f1f93b10
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-44
View File
@@ -1,44 +0,0 @@
using System;
using UnityEngine;
[Serializable]
public class PunchTape : Clue
{
public string MemoryIndex { get; set; }
public bool used = false;
// 构造函数,初始化特有属性并传递给基类
public PunchTape(string category, string name, string memoryIndex)
: base(category, name)
{
MemoryIndex = memoryIndex;
ClueType = ClueType.PunchTape;
}
// 重写 Display 方法,实现 PunchTape 的展示逻辑
public override void Display(ClueItem clueItem)
{
if (clueItem == null)
{
Debug.LogWarning("ClueItem is null. Display aborted.");
return;
}
if (clueItem.clueImageUI != null && used)
{
clueItem.clueImageUI.color = Color.grey;
}
if (clueItem.stateText != null && used)
{
clueItem.gameObject.SetActive(true);
}
if (clueItem.categoryText != null) clueItem.categoryText.text = "分类:" + Category;
if (clueItem.nameText != null)
{
clueItem.nameText.StringReference.Arguments = new object[] { LocaleClueName };
clueItem.nameText.RefreshString();
}
}
}
-11
View File
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 0d0a4a328f5b65340b33b1d84a108b43
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: