diff --git a/unity/Assets/Light/shaders/IndianOcean_DarknessOverlay.mat b/unity/Assets/Light/shaders/IndianOcean_DarknessOverlay.mat
index 93efba6..2abee3a 100644
--- a/unity/Assets/Light/shaders/IndianOcean_DarknessOverlay.mat
+++ b/unity/Assets/Light/shaders/IndianOcean_DarknessOverlay.mat
@@ -31,7 +31,7 @@ Material:
- _EchoRadius: 39.41617
- _EchoWidth: 2.5
- _LightSoftness: 1
- - _MinBrightness: 1
+ - _MinBrightness: 0
m_Colors:
- _DarknessColor: {r: 0.01, g: 0.01, b: 0.02, a: 1}
- _EchoCenter: {r: -2.4399998, g: -1.5000057, b: 0, a: 0}
diff --git a/unity/Assets/Scenes/Gameplay.unity b/unity/Assets/Scenes/Gameplay.unity
index d155e12..8d5d5c5 100644
--- a/unity/Assets/Scenes/Gameplay.unity
+++ b/unity/Assets/Scenes/Gameplay.unity
@@ -155,7 +155,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
darknessMaterial: {fileID: 2100000, guid: 6dd18d2379aff3040813ab8005b1898a, type: 2}
- debugShowAll: 1
+ debugShowAll: 0
minBrightness: 0
darknessColor: {r: 0.01, g: 0.01, b: 0.02, a: 1}
lightSoftness: 1
@@ -684,6 +684,94 @@ Transform:
m_CorrespondingSourceObject: {fileID: 8451410411389343811, guid: 3b47d748441aeb64da7d88325a75f1b7, type: 3}
m_PrefabInstance: {fileID: 59130222}
m_PrefabAsset: {fileID: 0}
+--- !u!1 &68438037
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 68438038}
+ - component: {fileID: 68438039}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: lost
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &68438038
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 68438037}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -14, y: 61, z: 0}
+ m_LocalScale: {x: 1.706414, y: 1.706414, z: 1.706414}
+ m_ConstrainProportionsScale: 1
+ m_Children: []
+ m_Father: {fileID: 922024178}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!212 &68438039
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 68438037}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 0
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 0
+ m_RayTraceProcedural: 0
+ m_virtualGeometry: 0
+ m_virtualGeometryShadow: 0
+ m_ShadingRate: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 0
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_Sprite: {fileID: 21300000, guid: 0f01c8b108b020b4ea35929b92863b2d, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.69, y: 2.43}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &68702802
GameObject:
m_ObjectHideFlags: 0
@@ -968,6 +1056,61 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
+--- !u!1 &73055213
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 73055215}
+ - component: {fileID: 73055214}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: GameLostOverlay
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &73055214
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 73055213}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: df2d86b87f5cbe544afe33a8c0c10abf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ lostCanvas: {fileID: 1430258823}
+ dimBackground: {fileID: 637101930}
+ lostTitleText: {fileID: 0}
+ lostTitleImage: {fileID: 0}
+ leftDecoration: {fileID: 0}
+ rightDecoration: {fileID: 0}
+ mainMenuButton: {fileID: 549601800}
+ mainMenuButtonImage: {fileID: 549601797}
+ lostSFX: {fileID: 0}
+--- !u!4 &73055215
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 73055213}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 562.5, y: 316.5, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1430258820}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &74360023
GameObject:
m_ObjectHideFlags: 0
@@ -3035,6 +3178,86 @@ Transform:
m_CorrespondingSourceObject: {fileID: 8451410411389343811, guid: 3b47d748441aeb64da7d88325a75f1b7, type: 3}
m_PrefabInstance: {fileID: 221625452}
m_PrefabAsset: {fileID: 0}
+--- !u!1 &224985235
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 224985236}
+ - component: {fileID: 224985238}
+ - component: {fileID: 224985237}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &224985236
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 224985235}
+ 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: 549601799}
+ 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 &224985237
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 224985235}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 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_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 28
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 10
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "\u4E3B\u754C\u9762"
+--- !u!222 &224985238
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 224985235}
+ m_CullTransparentMesh: 1
--- !u!1001 &232215155
PrefabInstance:
m_ObjectHideFlags: 0
@@ -7723,6 +7946,128 @@ Transform:
m_CorrespondingSourceObject: {fileID: 7680868130656722617, guid: c7b9040437d4deb498301bedac7ec47b, type: 3}
m_PrefabInstance: {fileID: 1560771471}
m_PrefabAsset: {fileID: 0}
+--- !u!1 &549601796
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 549601799}
+ - component: {fileID: 549601798}
+ - component: {fileID: 549601797}
+ - component: {fileID: 549601800}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: MainMenuButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &549601797
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 549601796}
+ 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: 0.2}
+ 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!222 &549601798
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 549601796}
+ m_CullTransparentMesh: 1
+--- !u!224 &549601799
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 549601796}
+ 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: 224985236}
+ m_Father: {fileID: 1490576152}
+ 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: -80}
+ m_SizeDelta: {x: 200, y: 60}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &549601800
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 549601796}
+ 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: 1.2, g: 1.2, b: 1.2, a: 1}
+ m_PressedColor: {r: 0.8, g: 0.8, b: 0.8, 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: 549601797}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
--- !u!1 &550853233
GameObject:
m_ObjectHideFlags: 0
@@ -9917,6 +10262,82 @@ Transform:
- {fileID: 563108172}
m_Father: {fileID: 505134148}
m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}
+--- !u!1 &637101927
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 637101928}
+ - component: {fileID: 637101929}
+ - component: {fileID: 637101930}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: DimBackground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &637101928
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 637101927}
+ 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: 1430258820}
+ 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 &637101929
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 637101927}
+ m_CullTransparentMesh: 1
+--- !u!114 &637101930
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 637101927}
+ 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: 0.6}
+ 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 &638120131
GameObject:
m_ObjectHideFlags: 0
@@ -15225,6 +15646,43 @@ SpriteRenderer:
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
+--- !u!1 &922024177
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 922024178}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: LostTitle
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &922024178
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 922024177}
+ 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: 68438038}
+ m_Father: {fileID: 1490576152}
+ 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: 30}
+ m_SizeDelta: {x: 800, y: 120}
+ m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &932470540
GameObject:
m_ObjectHideFlags: 0
@@ -21296,9 +21754,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
gameOverCanvas: {fileID: 0}
confirmButton: {fileID: 0}
- gameOverSFX:
- audioClip: {fileID: 8300000, guid: 370972ec1bb4cc64e8a96ce64057334c, type: 3}
- volume: 1
+ gameOverSFX: {fileID: 0}
confirmKey: 13
--- !u!114 &1357460803
MonoBehaviour:
@@ -21320,12 +21776,8 @@ MonoBehaviour:
mainMenuButton: {fileID: 0}
settingsPanel: {fileID: 1647702926}
settingsBackButton: {fileID: 1471976511}
- pauseSFX:
- audioClip: {fileID: 8300000, guid: 370972ec1bb4cc64e8a96ce64057334c, type: 3}
- volume: 1
- unpauseSFX:
- audioClip: {fileID: 8300000, guid: 6940b0d02566470418c2e593a6ff04c7, type: 3}
- volume: 1
+ pauseSFX: {fileID: 0}
+ unpauseSFX: {fileID: 0}
--- !u!4 &1357460804
Transform:
m_ObjectHideFlags: 0
@@ -22037,6 +22489,8 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
gameState: 0
+ lightShrinkDuration: 2
+ lostFadeOutDuration: 1
lightExpandDuration: 1.5
lightExpandTargetRadius: 20
fadeOutDuration: 1
@@ -23001,6 +23455,110 @@ Transform:
m_CorrespondingSourceObject: {fileID: 8451410411389343811, guid: 3b47d748441aeb64da7d88325a75f1b7, type: 3}
m_PrefabInstance: {fileID: 1430120389}
m_PrefabAsset: {fileID: 0}
+--- !u!1 &1430258819
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 1430258820}
+ - component: {fileID: 1430258823}
+ - component: {fileID: 1430258822}
+ - component: {fileID: 1430258821}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: LostCanvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1430258820
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1430258819}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 637101928}
+ - {fileID: 1490576152}
+ m_Father: {fileID: 73055215}
+ 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_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!114 &1430258821
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1430258819}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1430258822
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1430258819}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.5
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &1430258823
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1430258819}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_VertexColorAlwaysGammaSpace: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: -31072
+ m_TargetDisplay: 0
--- !u!1001 &1431146158
PrefabInstance:
m_ObjectHideFlags: 0
@@ -24177,12 +24735,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ae410525a1083304f99715898b5338e5, type: 3}
m_Name:
m_EditorClassIdentifier:
- selectSFX:
- audioClip: {fileID: 8300000, guid: 370972ec1bb4cc64e8a96ce64057334c, type: 3}
- volume: 1
- submitSFX:
- audioClip: {fileID: 8300000, guid: 6940b0d02566470418c2e593a6ff04c7, type: 3}
- volume: 1
+ selectSFX: {fileID: 0}
+ submitSFX: {fileID: 0}
--- !u!222 &1471976514
CanvasRenderer:
m_ObjectHideFlags: 0
@@ -24211,6 +24765,44 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: -15}
m_SizeDelta: {x: 160, y: 30}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1490576151
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 7
+ m_Component:
+ - component: {fileID: 1490576152}
+ m_Layer: 0
+ m_HasEditorInfo: 1
+ m_Name: CenterPanel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1490576152
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1490576151}
+ 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: 922024178}
+ - {fileID: 549601799}
+ m_Father: {fileID: 1430258820}
+ 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 &1497032769
GameObject:
m_ObjectHideFlags: 0
@@ -34107,3 +34699,4 @@ SceneRoots:
- {fileID: 1112109402}
- {fileID: 1385715428}
- {fileID: 733855062}
+ - {fileID: 73055215}
diff --git a/unity/Assets/UI/Art/ResultScreen/lost.png b/unity/Assets/UI/Art/ResultScreen/lost.png
new file mode 100644
index 0000000..5074e58
Binary files /dev/null and b/unity/Assets/UI/Art/ResultScreen/lost.png differ
diff --git a/unity/Assets/UI/Art/ResultScreen/lost.png.meta b/unity/Assets/UI/Art/ResultScreen/lost.png.meta
new file mode 100644
index 0000000..7d4613f
--- /dev/null
+++ b/unity/Assets/UI/Art/ResultScreen/lost.png.meta
@@ -0,0 +1,133 @@
+fileFormatVersion: 2
+guid: DywftHmlAXoLsWpW/3FmzSlaa7pipOD+KA4oePRPvSGjv0lXt9T9tIQ=
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ webStreaming: 0
+ priorityLevel: 0
+ uploadedMode: 2
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 1
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 3
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 2048
+ maxPlaceholderSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ maxPlaceholderSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 3
+ buildTarget: Server
+ maxTextureSize: 2048
+ maxPlaceholderSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/unity/Assets/UI/GameLostOverlay.cs b/unity/Assets/UI/GameLostOverlay.cs
new file mode 100644
index 0000000..3508e49
--- /dev/null
+++ b/unity/Assets/UI/GameLostOverlay.cs
@@ -0,0 +1,628 @@
+using System.Collections;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.SceneManagement;
+
+namespace GameFramework
+{
+ ///
+ /// 游戏失败叠加层 —— 直接挂在 Gameplay 场景的 Canvas 上。
+ ///
+ /// 使用方式:
+ /// 1. 在 Gameplay 场景里创建一个空物体,挂上本脚本
+ /// 2. 运行一次游戏(或点 Editor 按钮),脚本会自动构建子 UI
+ /// 3. 停止运行后,子 UI 留在场景中,可自由编辑样式/位置/精灵
+ /// 4. 运行时由 GameManager 调用 GameLostOverlay.Show() 激活
+ ///
+ /// 所有 UI 元素均为 [SerializeField],可在 Inspector 中替换。
+ ///
+ public class GameLostOverlay : MonoBehaviour
+ {
+ private static GameLostOverlay _instance;
+
+ // ====== Canvas ======
+ [Header("Canvas(留空则自动创建)")]
+ [SerializeField] private Canvas lostCanvas;
+
+ // ====== UI 元素引用(全部可编辑) ======
+ [Header("背景蒙版")]
+ [SerializeField] private Image dimBackground;
+
+ [Header("标题 —— 你已迷失……")]
+ [SerializeField] private Text lostTitleText;
+ [SerializeField] private Image lostTitleImage; // 可用图片替代文字
+
+ [Header("装饰")]
+ [SerializeField] private Image leftDecoration;
+ [SerializeField] private Image rightDecoration;
+
+ [Header("主界面按钮")]
+ [SerializeField] private Button mainMenuButton;
+ [SerializeField] private Image mainMenuButtonImage;
+
+ [Header("音效")]
+ [SerializeField] private AudioData lostSFX;
+
+ [Header("标题渐现动效")]
+ [Tooltip("标题渐现总时长(秒)")]
+ [SerializeField] private float titleFadeDuration = 1.5f;
+ [Tooltip("水面波纹位置抖动幅度(像素)")]
+ [SerializeField] private float ripplePositionAmplitude = 8f;
+ [Tooltip("水面波纹缩放抖动幅度")]
+ [SerializeField] private float rippleScaleAmplitude = 0.08f;
+ [Tooltip("水面波纹频率(越大抖动越快)")]
+ [SerializeField] private float rippleFrequency = 15f;
+ [Tooltip("水波纹材质(留空则自动从 Shader 创建)")]
+ [SerializeField] private Material rippleMaterial;
+ [Tooltip("主界面按钮延迟出现时间(秒)")]
+ [SerializeField] private float buttonFadeDelay = 2f;
+ [Tooltip("按钮渐现时长(秒)")]
+ [SerializeField] private float buttonFadeDuration = 0.5f;
+
+ private bool _isVisible;
+ private Coroutine _titleAnimCoroutine;
+ private Coroutine _buttonFadeCoroutine;
+ private Material _rippleMaterial;
+
+ // ====================================================================
+ // 静态入口
+ // ====================================================================
+
+ ///
+ /// 显示失败叠加层。优先使用场景中已有的实例,
+ /// 没有则动态创建一个。
+ ///
+ public static void Show()
+ {
+ // 场景中已有(隐藏的)实例?
+ if (_instance != null)
+ {
+ _instance.Activate();
+ return;
+ }
+
+ // 尝试在场景中找到
+ var found = FindObjectOfType();
+ if (found != null)
+ {
+ _instance = found;
+ found.Activate();
+ return;
+ }
+
+ // 都没有 → 动态创建
+ var obj = new GameObject("GameLostOverlay");
+ var overlay = obj.AddComponent();
+ overlay.BuildAll();
+ overlay.Activate();
+ }
+
+ // ====================================================================
+ // 生命周期
+ // ====================================================================
+
+ void Awake()
+ {
+ _instance = this;
+
+ // 如果 Canvas 还没赋值,尝试从自身获取
+ if (lostCanvas == null)
+ lostCanvas = GetComponent