提交新的效果

This commit is contained in:
2025-11-13 20:30:13 +08:00
parent 8cf629b1c6
commit c2d2c87fbe
11 changed files with 1455 additions and 359 deletions
+568 -4
View File
@@ -180,6 +180,299 @@ MonoBehaviour:
targetSentence: "\u522B\u8FC7\u6765\u6211\u611F\u89C9\u5BB3\u6015"
waveformAmplitude: 0.3
interactionRadius: 0.5
mouseInteractionRadius: 1.5
repulsionForce: 2
attractionForce: 1.5
enableAutoPropagation: 1
autoPropagationInterval: 2
autoPropagationCount: 1
propagationDuration: 1
propagationDelay: 0.08
maxPropagationNodes: 8
targetParticleColor: {r: 0.2, g: 0.78039217, b: 1, a: 1}
nonTargetParticleColor: {r: 1, g: 0.40870008, b: 0.38823533, a: 0.69803923}
propagationColor: {r: 0.6621573, g: 0.8664762, b: 0.9433962, a: 1}
floatingTextColor: {r: 1, g: 1, b: 1, a: 1}
targetCalmColor: {r: 0.78, g: 0.59, b: 0.59, a: 1}
targetParticleFontSize: 3.5
nonTargetParticleFontSize: 2.5
floatingTextFontSize: 2
targetParticleBold: 1
nonTargetParticleBold: 0
targetConnectionColor: {r: 0.3882353, g: 0.78039217, b: 1, a: 0.6666667}
nonTargetConnectionColor: {r: 1, g: 0.41911593, b: 0.38823533, a: 0.7}
propagationLineColor: {r: 0.6627451, g: 0.8666667, b: 0.94509804, a: 1}
targetConnectionThickness: 0.04
nonTargetConnectionThickness: 0.02
propagationLineThickness: 0.03
integrationProgressText: {fileID: 1294290436}
interferenceCountText: {fileID: 528708888}
focusSequenceButton: {fileID: 153766885}
focusZoomScale: 1.6
focusMoveDuration: 1.2
focusFadeDuration: 1
probabilityDuration: 3.5
predictionSequenceGap: 0.4
spreadDistance: 0.35
enableSeparation: 1
minParticleSpacing: 0.6
separationForce: 2.5
lineAlphaMultiplier: 0.65
--- !u!1 &153766884
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 153766888}
- component: {fileID: 153766887}
- component: {fileID: 153766886}
- component: {fileID: 153766885}
m_Layer: 5
m_Name: Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &153766885
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 153766884}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 153766886}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &153766886
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 153766884}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &153766887
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 153766884}
m_CullTransparentMesh: 1
--- !u!224 &153766888
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 153766884}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.012000492, y: 0.012000492, z: 0.012000492}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1137525304}
m_Father: {fileID: 1665911936}
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: 6.26, y: 2.12}
m_SizeDelta: {x: 160, y: 80}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &528708887
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 528708890}
- component: {fileID: 528708889}
- component: {fileID: 528708888}
m_Layer: 5
m_Name: Text (TMP) (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &528708888
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 528708887}
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: 4284643057
m_fontColor: {r: 0.9433962, g: 0.4632709, b: 0.38625845, 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: 0.3
m_fontSizeBase: 0.3
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 1
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.41540456, z: -2.6862788, 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!222 &528708889
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 528708887}
m_CullTransparentMesh: 1
--- !u!224 &528708890
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 528708887}
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: 1665911936}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 10.839999, y: -1.5600002}
m_SizeDelta: {x: 1, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &786157861
GameObject:
m_ObjectHideFlags: 0
@@ -260,8 +553,8 @@ Camera:
m_GameObject: {fileID: 786157861}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_ClearFlags: 2
m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
@@ -317,6 +610,274 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1137525303
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1137525304}
- component: {fileID: 1137525306}
- component: {fileID: 1137525305}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1137525304
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1137525303}
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: 153766888}
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!114 &1137525305
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1137525303}
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: "\u8F93\u51FA"
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: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 24
m_fontSizeBase: 24
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!222 &1137525306
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1137525303}
m_CullTransparentMesh: 1
--- !u!1 &1294290433
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1294290434}
- component: {fileID: 1294290435}
- component: {fileID: 1294290436}
m_Layer: 5
m_Name: Text (TMP) (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1294290434
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1294290433}
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: 1665911936}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 10.83, y: -0.71}
m_SizeDelta: {x: 1, y: 1}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1294290435
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1294290433}
m_CullTransparentMesh: 1
--- !u!114 &1294290436
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1294290433}
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: 4294040693
m_fontColor: {r: 0.45745817, g: 0.86362934, b: 0.9433962, 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: 0.3
m_fontSizeBase: 0.3
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 1
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.41540456, z: -2.6862788, 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 &1665911932
GameObject:
m_ObjectHideFlags: 0
@@ -410,12 +971,15 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Children:
- {fileID: 1294290434}
- {fileID: 528708890}
- {fileID: 153766888}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_AnchoredPosition: {x: -2.54, y: 0}
m_SizeDelta: {x: 10, y: 10}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1764870496
@@ -40,6 +40,18 @@ namespace AibisDream.MiniGame.Language
public float dissolveProgress = 0f; // 消散进度(0-1
public WaveformPoint waveformPoint; // 关联的波形点
// 颜色配置(由Manager设置)
private Color targetColor = new Color(1f, 0.39f, 0.39f, 1f); // 目标粒子颜色
private Color nonTargetColor = new Color(0.2f, 0.78f, 1f, 1f); // 非目标粒子颜色
private Color propagationColor = new Color(1f, 0.59f, 0.2f, 1f); // 传播颜色
private Color calmColor = new Color(0.78f, 0.59f, 0.59f, 1f); // 平静后颜色
// 字体样式配置(由Manager设置)
private float targetFontSize = 3.5f;
private float nonTargetFontSize = 2.5f;
private bool targetBold = true;
private bool nonTargetBold = false;
protected override void Awake()
{
base.Awake();
@@ -47,13 +59,14 @@ namespace AibisDream.MiniGame.Language
baseAlpha = 0.6f; // 0-1 范围的透明度
probability = Random.Range(0.1f, 1f);
alpha = baseAlpha + probability * 0.4f; // 最大 1.0
size = 3f;
size = nonTargetFontSize; // 默认使用非目标粒子大小
velocity = new Vector2(Random.Range(-0.5f, 0.5f), Random.Range(-0.5f, 0.5f));
changeInterval = Random.Range(1f, 2.5f);
if (textMesh != null)
{
textMesh.fontSize = size;
UpdateFontStyle();
}
}
@@ -125,6 +138,9 @@ namespace AibisDream.MiniGame.Language
{
if (textMesh == null) return;
// 更新字体样式(大小和加粗)
UpdateFontStyle();
// 计算显示位置
Vector3 displayOffset = (Vector3)(vibrationOffset + anxietyShakeOffset) + Vector3.up * anxietyFloatY;
textMesh.transform.localPosition = displayOffset;
@@ -144,19 +160,21 @@ namespace AibisDream.MiniGame.Language
if (isRed)
{
// 红色粒子:根据平静进度调整颜色
float r = Mathf.Lerp(1f, 0.78f, calmProgress);
float g = Mathf.Lerp(0.39f, 0.59f, calmProgress);
float b = Mathf.Lerp(0.39f, 0.59f, calmProgress);
color = new Color(r, g, b, displayAlpha); // displayAlpha 已经是 0-1 范围
// 目标粒子:根据平静进度从目标颜色过渡到平静颜色
float r = Mathf.Lerp(targetColor.r, calmColor.r, calmProgress);
float g = Mathf.Lerp(targetColor.g, calmColor.g, calmProgress);
float b = Mathf.Lerp(targetColor.b, calmColor.b, calmProgress);
color = new Color(r, g, b, displayAlpha);
}
else if (isOrange)
{
color = new Color(1f, 0.59f, 0.2f, displayAlpha);
// 传播效果颜色
color = new Color(propagationColor.r, propagationColor.g, propagationColor.b, displayAlpha);
}
else
{
color = new Color(0.2f, 0.78f, 1f, displayAlpha);
// 非目标粒子颜色
color = new Color(nonTargetColor.r, nonTargetColor.g, nonTargetColor.b, displayAlpha);
}
textMesh.color = color;
@@ -199,5 +217,53 @@ namespace AibisDream.MiniGame.Language
vibrationOffset = Vector2.zero;
effectTimer = 0;
}
/// <summary>
/// 设置粒子颜色配置
/// </summary>
public void SetColors(Color target, Color nonTarget, Color propagation, Color calm)
{
targetColor = target;
nonTargetColor = nonTarget;
propagationColor = propagation;
calmColor = calm;
}
/// <summary>
/// 设置字体样式配置
/// </summary>
public void SetFontStyles(float targetSize, float nonTargetSize, bool targetIsBold, bool nonTargetIsBold)
{
targetFontSize = targetSize;
nonTargetFontSize = nonTargetSize;
targetBold = targetIsBold;
nonTargetBold = nonTargetIsBold;
// 立即应用
if (textMesh != null)
{
UpdateFontStyle();
}
}
/// <summary>
/// 更新字体样式(根据粒子状态)
/// </summary>
private void UpdateFontStyle()
{
if (textMesh == null) return;
// 根据是否为目标粒子设置大小和加粗
if (isRed)
{
textMesh.fontSize = targetFontSize;
textMesh.fontStyle = targetBold ? TMPro.FontStyles.Bold : TMPro.FontStyles.Normal;
}
else
{
textMesh.fontSize = nonTargetFontSize;
textMesh.fontStyle = nonTargetBold ? TMPro.FontStyles.Bold : TMPro.FontStyles.Normal;
}
}
}
}
@@ -6,6 +6,7 @@ namespace AibisDream.MiniGame.Language
{
/// <summary>
/// 连接线渲染器:使用Shapes绘制粒子间的连接线
/// 注意:sortingOrder 设置为 0,确保低于文字(文字 sortingOrder = 10
/// </summary>
[ExecuteAlways]
public class ConnectionRenderer : ImmediateModeShapeDrawer
@@ -15,19 +16,33 @@ namespace AibisDream.MiniGame.Language
[Header("连接线设置")]
public float connectionDistance = 2f;
public Color blueConnectionColor = new Color(0.39f, 0.78f, 1f, 0.7f);
public Color redConnectionColor = new Color(1f, 0.39f, 0.39f, 1f);
public float blueLineThickness = 0.02f;
public float redLineThickness = 0.04f;
private Color nonTargetConnectionColor = new Color(0.39f, 0.78f, 1f, 0.7f); // 非目标粒子连线颜色
private Color targetConnectionColor = new Color(1f, 0.39f, 0.39f, 1f); // 目标粒子连线颜色
private float nonTargetLineThickness = 0.02f;
private float targetLineThickness = 0.04f;
[Header("效果传播设置")]
public Color propagationColor = new Color(1f, 0.59f, 0.2f, 1f);
public float propagationLineThickness = 0.03f;
private Color propagationColor = new Color(1f, 0.59f, 0.2f, 1f);
private float propagationLineThickness = 0.03f;
private List<CandidateParticle> candidateParticles;
private List<EffectPropagation> effectPropagations;
private CompletionPhase completionPhase;
private float fadeOutAlpha;
private float nonTargetAlphaScale = 1f;
private float targetAlphaScale = 1f;
public float NonTargetAlphaScale
{
get => nonTargetAlphaScale;
set => nonTargetAlphaScale = Mathf.Clamp01(value);
}
public float TargetAlphaScale
{
get => targetAlphaScale;
set => targetAlphaScale = Mathf.Clamp(value, 0f, 1.5f);
}
public void SetData(
List<CandidateParticle> candidates,
@@ -50,15 +65,18 @@ namespace AibisDream.MiniGame.Language
{
Draw.BlendMode = ShapesBlendMode.Transparent;
Draw.ZTest = UnityEngine.Rendering.CompareFunction.Always;
// 注意:连接线默认在底层,文字的 sortingOrder = 10 会显示在上层
// 绘制蓝色粒子间的连线
if (completionPhase == CompletionPhase.None || completionPhase == CompletionPhase.Arranging)
if (completionPhase == CompletionPhase.None || completionPhase == CompletionPhase.Completed)
{
DrawBlueConnections();
}
// 绘制红色粒子间的连线
if (completionPhase == CompletionPhase.None || completionPhase == CompletionPhase.Arranging)
if (completionPhase == CompletionPhase.None ||
completionPhase == CompletionPhase.Completed ||
completionPhase == CompletionPhase.Focusing)
{
DrawRedConnections();
}
@@ -74,7 +92,7 @@ namespace AibisDream.MiniGame.Language
private void DrawBlueConnections()
{
Draw.LineGeometry = LineGeometry.Flat2D;
Draw.Thickness = blueLineThickness;
Draw.Thickness = nonTargetLineThickness;
for (int i = 0; i < candidateParticles.Count; i++)
{
@@ -90,8 +108,8 @@ namespace AibisDream.MiniGame.Language
if (distance < connectionDistance)
{
float alpha = Mathf.Lerp(0.7f, 0f, distance / connectionDistance) * fadeOutAlpha;
Color lineColor = blueConnectionColor;
lineColor.a = alpha;
Color lineColor = nonTargetConnectionColor;
lineColor.a = alpha * nonTargetAlphaScale;
Draw.Line(p1.transform.position, p2.transform.position, lineColor);
}
@@ -102,7 +120,7 @@ namespace AibisDream.MiniGame.Language
private void DrawRedConnections()
{
Draw.LineGeometry = LineGeometry.Flat2D;
Draw.Thickness = redLineThickness;
Draw.Thickness = targetLineThickness;
var redParticles = new List<CandidateParticle>();
foreach (var p in candidateParticles)
@@ -123,8 +141,8 @@ namespace AibisDream.MiniGame.Language
if (distance < connectionDistance)
{
float alpha = Mathf.Lerp(1f, 0.4f, distance / connectionDistance);
Color lineColor = redConnectionColor;
lineColor.a = alpha;
Color lineColor = targetConnectionColor;
lineColor.a = alpha * targetAlphaScale;
Draw.Line(redParticles[i].transform.position, redParticles[j].transform.position, lineColor);
}
@@ -205,6 +223,25 @@ namespace AibisDream.MiniGame.Language
Draw.Triangle(tip, left, right, color);
}
/// <summary>
/// 设置连接线样式
/// </summary>
public void SetConnectionStyles(
Color targetColor,
Color nonTargetColor,
Color propColor,
float targetThickness,
float nonTargetThickness,
float propThickness)
{
targetConnectionColor = targetColor;
nonTargetConnectionColor = nonTargetColor;
propagationColor = propColor;
targetLineThickness = targetThickness;
nonTargetLineThickness = nonTargetThickness;
propagationLineThickness = propThickness;
}
}
}
@@ -23,42 +23,46 @@ namespace AibisDream.MiniGame.Language
}
/// <summary>
/// 效果传播系统:管理从红色粒子到蓝色粒子的效果传递
/// 效果传播系统:管理从红色粒子到蓝色粒子的效果传递(使用BFS算法)
/// </summary>
public class EffectPropagation
{
private CandidateParticle redParticle;
private List<PropagationInfo> propagatedParticles = new List<PropagationInfo>();
private List<CandidateParticle> propagationQueue = new List<CandidateParticle>();
private Queue<CandidateParticle> propagationQueue = new Queue<CandidateParticle>();
private float lifeTimer;
private float propagationDelay = 0.05f;
private float propagationDelay;
private float propagationCounter = 0f;
private int maxPropagationSteps = 8;
private int currentPropagationStep = 0;
private int maxPropagationNodes;
private int currentNodeCount = 0;
private int currentStep = 0;
public bool IsActive => lifeTimer > 0;
public List<PropagationInfo> PropagatedParticles => propagatedParticles;
public EffectPropagation(CandidateParticle redParticle, float duration = 1f)
public EffectPropagation(CandidateParticle redParticle, float duration, float delay, int maxNodes)
{
this.redParticle = redParticle;
this.lifeTimer = duration;
this.propagationDelay = delay;
this.maxPropagationNodes = maxNodes;
// 从红色粒子开始传播
// 从红色粒子开始传播(第0步)
var connectedBlues = FindConnectedBlues(redParticle);
if (connectedBlues.Count > 0 && currentPropagationStep < maxPropagationSteps)
if (connectedBlues.Count > 0 && currentNodeCount < maxPropagationNodes)
{
// 随机选择一个连接的蓝色粒子
var targetParticle = connectedBlues[Random.Range(0, connectedBlues.Count)];
ApplyEffectToParticle(targetParticle);
// 第一步:处理所有直接连接的蓝色粒子(BFS第一层)
foreach (var targetParticle in connectedBlues)
{
if (currentNodeCount >= maxPropagationNodes) break;
// 记录传播信息
propagatedParticles.Add(new PropagationInfo(targetParticle, redParticle, 1));
// 加入传播队列
propagationQueue.Add(targetParticle);
currentPropagationStep = 1;
ApplyEffectToParticle(targetParticle);
propagatedParticles.Add(new PropagationInfo(targetParticle, redParticle, 1));
propagationQueue.Enqueue(targetParticle);
currentNodeCount++;
}
currentStep = 1;
}
}
@@ -67,35 +71,33 @@ namespace AibisDream.MiniGame.Language
lifeTimer -= deltaTime;
propagationCounter += deltaTime;
// 定期传播
if (propagationCounter >= propagationDelay && currentPropagationStep < maxPropagationSteps)
// BFS逐层传播
if (propagationCounter >= propagationDelay && propagationQueue.Count > 0 && currentNodeCount < maxPropagationNodes)
{
propagationCounter = 0f;
currentStep++;
List<CandidateParticle> nextQueue = new List<CandidateParticle>();
foreach (var sourceParticle in propagationQueue)
// 处理当前层的所有节点
int currentLevelSize = propagationQueue.Count;
for (int i = 0; i < currentLevelSize; i++)
{
if (currentPropagationStep >= maxPropagationSteps) break;
if (currentNodeCount >= maxPropagationNodes) break;
var sourceParticle = propagationQueue.Dequeue();
var connectedBlues = FindConnectedBlues(sourceParticle);
if (connectedBlues.Count > 0)
// 将所有连接的蓝色粒子加入下一层
foreach (var targetParticle in connectedBlues)
{
var targetParticle = connectedBlues[Random.Range(0, connectedBlues.Count)];
if (currentNodeCount >= maxPropagationNodes) break;
ApplyEffectToParticle(targetParticle);
currentPropagationStep++;
propagatedParticles.Add(new PropagationInfo(targetParticle, sourceParticle, currentPropagationStep));
if (currentPropagationStep < maxPropagationSteps)
{
nextQueue.Add(targetParticle);
}
propagatedParticles.Add(new PropagationInfo(targetParticle, sourceParticle, currentStep + 1));
propagationQueue.Enqueue(targetParticle);
currentNodeCount++;
}
}
propagationQueue = nextQueue;
}
// 更新所有传播粒子的脉冲动画
@@ -7,6 +7,8 @@ namespace AibisDream.MiniGame.Language
/// </summary>
public class FloatingTextParticle : TextParticle
{
private Color baseColor = new Color(0.7f, 0.78f, 1f, 1f); // 默认颜色
protected override void Awake()
{
base.Awake();
@@ -15,13 +17,37 @@ namespace AibisDream.MiniGame.Language
baseAlpha = Random.Range(0.04f, 0.1f); // 0-1 范围的透明度
alpha = baseAlpha;
size = Random.Range(1.5f, 2.5f);
velocity = new Vector2(Random.Range(-0.3f, 0.3f), Random.Range(-0.3f, 0.3f));
changeInterval = Random.Range(0.5f, 0.7f);
velocity = new Vector2(Random.Range(-1.2f, 1.2f), Random.Range(-1.2f, 1.2f));
changeInterval = Random.Range(0.2f, 0.3f);
if (textMesh != null)
{
textMesh.fontSize = size;
textMesh.color = new Color(0.7f, 0.78f, 1f, alpha);
textMesh.color = new Color(baseColor.r, baseColor.g, baseColor.b, alpha);
}
}
/// <summary>
/// 设置粒子颜色
/// </summary>
public void SetColor(Color color)
{
baseColor = color;
if (textMesh != null)
{
textMesh.color = new Color(baseColor.r, baseColor.g, baseColor.b, alpha);
}
}
/// <summary>
/// 设置字体大小
/// </summary>
public void SetFontSize(float fontSize)
{
size = fontSize;
if (textMesh != null)
{
textMesh.fontSize = size;
}
}
@@ -29,13 +55,13 @@ namespace AibisDream.MiniGame.Language
{
if (textMesh != null)
{
Color color = new Color(0.7f, 0.78f, 1f, alpha);
Color color = new Color(baseColor.r, baseColor.g, baseColor.b, alpha);
textMesh.color = color;
}
if (glowSprite != null)
{
glowSprite.color = new Color(0.7f, 0.78f, 1f, alpha * 0.3f);
glowSprite.color = new Color(baseColor.r, baseColor.g, baseColor.b, alpha * 0.3f);
}
}
}
File diff suppressed because it is too large Load Diff
@@ -38,61 +38,6 @@
### 6. 游戏目标与完成序列
**目标**:让所有红色粒子连接成一个整体,且与蓝色粒子分离
**完成序列**
1. **arranging阶段**
- 红色粒子排列成水平一行(屏幕中央)
- 蓝色/橙色粒子停止移动
- 非红色粒子淡出
2. **revealing阶段**
- 红色粒子逐个显示目标文字:"别过来我感觉害怕"
- 显示前快速闪烁随机字符
- 文字开始剧烈抖动(焦虑效果)
3. **completed阶段**
- 进入波形交互阶段
### 7. 波形交互系统(核心创新)
**初始状态**
- 每个文字下方有一个对应的波形点
- 波形使用Perlin噪声生成(多层噪声叠加)
- 波形呈现异常、混乱的抖动
- 文字随波形剧烈抖动+上下漂浮(表现焦虑情绪)
**交互机制**
- 玩家按住鼠标左键并拖动,抚平附近的波形
- 波形有"抵抗力"机制:
- 异常程度越高,抵抗力越强
- 需要持续按住30-90帧才能完全抚平
- 拖动速度越快,抚平效果越强
- 抚平区域有交互半径(50像素)
- 显示进度环反馈
**抚平效果**
- 波形从异常噪波逐渐变为规律的正弦波
- 波形颜色从红色渐变为蓝色
- 对应文字的抖动和漂浮逐渐减弱
- 波形完全抚平后:
- 文字停止变化和抖动
- 文字开始消散(透明度降低)
- 波形点也随之消散
**视觉反馈**
- 抚平时产生蓝色粒子效果
- 鼠标周围显示交互范围圈
- 波形点显示抚平进度环
- 底部显示整体平静进度条
**情感隐喻**
- 异常波形 = 焦虑、不安的情绪
- 文字抖动 = 情绪的外在表现
- 抚平波形 = 安抚、平复情绪的过程
- 文字消散 = 负面情绪的消解
### 8. 重置机制
- 所有文字消散后,游戏自动重置
- 粒子重新随机分布
- 重新选择8个红色目标粒子
## Unity实现要点
@@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: aff5f43b9eb5c4242842ca3cc33afd99, type: 3}
m_Name: NeuralPropagationConfig
m_EditorClassIdentifier:
bluePropagations:
- startChar: "\u6628"
content: "\u6628\u5929\u6211\u78B0"
- startChar: "\u6211"
content: "\u544A\u8BC9\u6211"
anxietyWords:
- "\u5BB3\u6015"
- "\u600E\u4E48\u529E"
- "\u56DE\u907F"
- "\u7D27\u5F20"
- "\u7126\u8651"
- "\u62C5\u5FC3"
- "\u6050\u60E7"
- "\u4E0D\u5B89"
hiddenInfo: "\u82F1\u91CC"
bluePropagationSpeed: 1
redOverrideInterval: 2
propagationDistance: 2
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3896a6c1f7dac79448309febc22689de
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -161,6 +161,32 @@ namespace AibisDream.MiniGame.Language
textMesh.text = currentChar;
}
public void ForceSetCharacter(string character)
{
currentChar = character;
UpdateText();
}
public void SetStaticState(bool value)
{
isStatic = value;
}
public void SetCalmedState(bool value)
{
isCalmed = value;
}
public void SetChangeInterval(float interval)
{
changeInterval = Mathf.Max(0.02f, interval);
}
public void ResetChangeTimer(float timer)
{
changeTimer = timer;
}
protected virtual void UpdateVisuals()
{
if (textMesh != null)
@@ -6,6 +6,7 @@ namespace AibisDream.MiniGame.Language
{
/// <summary>
/// 波形渲染器:使用Shapes绘制波形和交互效果
/// 注意:渲染在底层,确保低于文字(文字 sortingOrder = 10
/// </summary>
[ExecuteAlways]
public class WaveformRenderer : ImmediateModeShapeDrawer
@@ -83,13 +84,14 @@ namespace AibisDream.MiniGame.Language
if (waveformPoints == null || waveformPoints.Count == 0)
return;
if (completionPhase != CompletionPhase.Revealing && completionPhase != CompletionPhase.Completed)
if (completionPhase != CompletionPhase.Focusing)
return;
using (Draw.Command(cam))
{
Draw.BlendMode = ShapesBlendMode.Transparent;
Draw.ZTest = UnityEngine.Rendering.CompareFunction.Always;
// 注意:波形默认在底层,文字的 sortingOrder = 10 会显示在上层
// 绘制粒子效果
DrawWaveformParticles();