提交新的效果
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user