diff --git a/Assets/AddressableAssetsData/link.xml b/Assets/AddressableAssetsData/link.xml
deleted file mode 100644
index 62ce7303..00000000
--- a/Assets/AddressableAssetsData/link.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Assets/AddressableAssetsData/link.xml.meta b/Assets/AddressableAssetsData/link.xml.meta
deleted file mode 100644
index 8ce5431f..00000000
--- a/Assets/AddressableAssetsData/link.xml.meta
+++ /dev/null
@@ -1,7 +0,0 @@
-fileFormatVersion: 2
-guid: 0bd49428350698946b692e1dd6c3eb5e
-TextScriptImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scenes/gamePlay_gamePlay.unity b/Assets/Scenes/gamePlay_gamePlay.unity
index 95319e50..ebbf2e64 100644
--- a/Assets/Scenes/gamePlay_gamePlay.unity
+++ b/Assets/Scenes/gamePlay_gamePlay.unity
@@ -10903,6 +10903,156 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 162, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &227742951
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 227742952}
+ - component: {fileID: 227742955}
+ - component: {fileID: 227742954}
+ - component: {fileID: 227742953}
+ m_Layer: 0
+ m_Name: _AndroidTapDetectLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &227742952
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 227742951}
+ serializedVersion: 2
+ 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: 820215023}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &227742953
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 227742951}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackIndex: 3
+ followTarget: {fileID: 0}
+ followRotation: 1
+--- !u!61 &227742954
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 227742951}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 1.97, y: 10.8}
+ newSize: {x: 11.99, y: 10.8}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 1.97, y: 10.8}
+ m_EdgeRadius: 0
+--- !u!212 &227742955
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 227742951}
+ m_Enabled: 0
+ 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_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+ 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: 4
+ m_Sprite: {fileID: 21300000, guid: e816a07ba153c4647b5544d5edd6d3c6, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.3529412}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.99, y: 10.8}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &228531561
GameObject:
m_ObjectHideFlags: 0
@@ -10938,6 +11088,7 @@ Transform:
- {fileID: 766553121}
- {fileID: 396376010}
- {fileID: 2085829916}
+ - {fileID: 961712129}
m_Father: {fileID: 1568415819}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &228531563
@@ -17390,7 +17541,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: 560/560
+ m_text: 1500/1500
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 7cad3f54ac7b53d4885f00c16f1a6929, type: 2}
m_sharedMaterial: {fileID: -346136068272202111, guid: 7cad3f54ac7b53d4885f00c16f1a6929, type: 2}
@@ -20552,6 +20703,7 @@ Transform:
- {fileID: 1814450260}
- {fileID: 518846680}
- {fileID: 831755762}
+ - {fileID: 1410371134}
m_Father: {fileID: 1568415819}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &471259275
@@ -24176,6 +24328,156 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 629381757}
m_CullTransparentMesh: 1
+--- !u!1 &630992056
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 630992057}
+ - component: {fileID: 630992060}
+ - component: {fileID: 630992059}
+ - component: {fileID: 630992058}
+ m_Layer: 0
+ m_Name: _AndroidTapDetectLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &630992057
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630992056}
+ serializedVersion: 2
+ 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: 1801052429}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &630992058
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630992056}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackIndex: 1
+ followTarget: {fileID: 0}
+ followRotation: 1
+--- !u!61 &630992059
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630992056}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 1.97, y: 10.8}
+ newSize: {x: 11.99, y: 10.8}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 1.97, y: 10.8}
+ m_EdgeRadius: 0
+--- !u!212 &630992060
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 630992056}
+ m_Enabled: 0
+ 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_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+ 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: 4
+ m_Sprite: {fileID: 21300000, guid: e816a07ba153c4647b5544d5edd6d3c6, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.3529412}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.99, y: 10.8}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &632747001
GameObject:
m_ObjectHideFlags: 0
@@ -34270,7 +34572,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 802900243}
- m_Enabled: 0
+ m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
@@ -36651,6 +36953,7 @@ Transform:
- {fileID: 856873761}
- {fileID: 1848712590}
- {fileID: 594748198}
+ - {fileID: 227742952}
m_Father: {fileID: 1568415819}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &820215024
@@ -37161,6 +37464,7 @@ RectTransform:
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 276712529}
+ - {fileID: 1460982759}
- {fileID: 1113650922}
m_Father: {fileID: 1551841547}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -40410,6 +40714,156 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 961429714}
m_CullTransparentMesh: 1
+--- !u!1 &961712128
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 961712129}
+ - component: {fileID: 961712132}
+ - component: {fileID: 961712131}
+ - component: {fileID: 961712130}
+ m_Layer: 0
+ m_Name: _AndroidTapDetectLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &961712129
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 961712128}
+ serializedVersion: 2
+ 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: 228531562}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &961712130
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 961712128}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackIndex: 2
+ followTarget: {fileID: 0}
+ followRotation: 1
+--- !u!61 &961712131
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 961712128}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 1.97, y: 10.8}
+ newSize: {x: 11.99, y: 10.8}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 1.97, y: 10.8}
+ m_EdgeRadius: 0
+--- !u!212 &961712132
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 961712128}
+ m_Enabled: 0
+ 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_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+ 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: 4
+ m_Sprite: {fileID: 21300000, guid: e816a07ba153c4647b5544d5edd6d3c6, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.3529412}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.99, y: 10.8}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!4 &962195945 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4907775837964014163, guid: 96d352d647a28914c97c8e0732daf67e, type: 3}
@@ -43861,6 +44315,7 @@ Transform:
- {fileID: 480679343}
- {fileID: 424100674}
- {fileID: 2055240851}
+ - {fileID: 1965895505}
m_Father: {fileID: 1568415819}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &1083269824
@@ -44172,7 +44627,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 320.5, y: -50}
- m_SizeDelta: {x: 321, y: 116}
+ m_SizeDelta: {x: 0, y: 116}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1090215143
MonoBehaviour:
@@ -46763,7 +47218,7 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
- m_text: 1900/1900
+ m_text: 620/620
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 7cad3f54ac7b53d4885f00c16f1a6929, type: 2}
m_sharedMaterial: {fileID: -346136068272202111, guid: 7cad3f54ac7b53d4885f00c16f1a6929, type: 2}
@@ -49722,7 +50177,7 @@ MonoBehaviour:
gameplaySceneName: gamePlay_gamePlay
requirePlaybackStarted: 1
pauseButtonScenePath: artworks/NEW UI/zhuangshi (3)/Pause
- pauseTriggerButton: {fileID: 802900245}
+ pauseTriggerButton: {fileID: 1460982760}
continueButton: {fileID: 2447209698389928936}
replayButton: {fileID: 5583248084823892525}
exitButton: {fileID: 1290499235465011860}
@@ -54563,6 +55018,156 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1410197819}
m_CullTransparentMesh: 1
+--- !u!1 &1410371133
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1410371134}
+ - component: {fileID: 1410371137}
+ - component: {fileID: 1410371136}
+ - component: {fileID: 1410371135}
+ m_Layer: 0
+ m_Name: _AndroidTapDetectLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1410371134
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410371133}
+ serializedVersion: 2
+ 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: 471259274}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1410371135
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410371133}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackIndex: 4
+ followTarget: {fileID: 0}
+ followRotation: 1
+--- !u!61 &1410371136
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410371133}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 1.97, y: 10.8}
+ newSize: {x: 11.99, y: 10.8}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 1.97, y: 10.8}
+ m_EdgeRadius: 0
+--- !u!212 &1410371137
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1410371133}
+ m_Enabled: 0
+ 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_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+ 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: 4
+ m_Sprite: {fileID: 21300000, guid: e816a07ba153c4647b5544d5edd6d3c6, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.3529412}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.99, y: 10.8}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!1 &1411875367
GameObject:
m_ObjectHideFlags: 0
@@ -55386,6 +55991,126 @@ RectTransform:
m_AnchoredPosition: {x: 971.3794, y: 396.2654}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1460982758
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1460982759}
+ - component: {fileID: 1460982762}
+ - component: {fileID: 1460982761}
+ - component: {fileID: 1460982760}
+ m_Layer: 0
+ m_Name: pauseButton
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1460982759
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1460982758}
+ 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: 839350760}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 1873.44, y: -50}
+ m_SizeDelta: {x: 45, y: 45}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1460982760
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1460982758}
+ 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: 1460982761}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1460982761
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1460982758}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 21300000, guid: cbae90032201fb947b79beddd8171042, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1460982762
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1460982758}
+ m_CullTransparentMesh: 1
--- !u!1 &1461351368
GameObject:
m_ObjectHideFlags: 0
@@ -56622,14 +57347,14 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
slotIndex: 2
- maxHP: 1900
- currentHP: 1900
+ maxHP: 620
+ currentHP: 620
maxMana: 200
currentMana: 0
damageResistance: 0
- scoreEfficiency: 0.12
+ scoreEfficiency: 0.04
bmm: {fileID: 1261342020}
- attack: 37
+ attack: 7
baseTrackScore: 1000
perfectRatio: 1
greatRatio: 0.75
@@ -58948,6 +59673,7 @@ GameObject:
m_Component:
- component: {fileID: 1577793742}
- component: {fileID: 1577793741}
+ - component: {fileID: 1577793743}
m_Layer: 0
m_Name: JudgeManager
m_TagString: Untagged
@@ -58989,6 +59715,25 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1577793743
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1577793740}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 16d03d0d613217b4ebdba1b8b63bf735, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ gameplayCamera: {fileID: 754533170}
+ enableMouseFallback: 1
+ hitLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ trackPlaneWorldZ: 0
+ forceOrthographicMode: 0
--- !u!1 &1579840623
GameObject:
m_ObjectHideFlags: 0
@@ -64336,6 +65081,7 @@ Transform:
- {fileID: 614786766}
- {fileID: 1466703738}
- {fileID: 1646580879}
+ - {fileID: 630992057}
m_Father: {fileID: 1568415819}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &1801052430
@@ -66575,14 +67321,14 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
slotIndex: 4
- maxHP: 560
- currentHP: 560
- maxMana: 100
+ maxHP: 1500
+ currentHP: 1500
+ maxMana: 300
currentMana: 0
damageResistance: 0
- scoreEfficiency: 0.01
+ scoreEfficiency: 0.09
bmm: {fileID: 1261342020}
- attack: 8
+ attack: 38
baseTrackScore: 1000
perfectRatio: 1
greatRatio: 0.75
@@ -69036,6 +69782,156 @@ MonoBehaviour:
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
+--- !u!1 &1965895504
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1965895505}
+ - component: {fileID: 1965895508}
+ - component: {fileID: 1965895507}
+ - component: {fileID: 1965895506}
+ m_Layer: 0
+ m_Name: _AndroidTapDetectLine
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1965895505
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1965895504}
+ serializedVersion: 2
+ 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: 1083269823}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1965895506
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1965895504}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ trackIndex: 0
+ followTarget: {fileID: 0}
+ followRotation: 1
+--- !u!61 &1965895507
+BoxCollider2D:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1965895504}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Density: 1
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_ForceSendLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ForceReceiveLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_ContactCaptureLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_CallbackLayers:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_IsTrigger: 0
+ m_UsedByEffector: 0
+ m_CompositeOperation: 0
+ m_CompositeOrder: 0
+ m_Offset: {x: 0, y: 0}
+ m_SpriteTilingProperty:
+ border: {x: 0, y: 0, z: 0, w: 0}
+ pivot: {x: 0.5, y: 0.5}
+ oldSize: {x: 1.97, y: 10.8}
+ newSize: {x: 11.99, y: 10.8}
+ adaptiveTilingThreshold: 0.5
+ drawMode: 0
+ adaptiveTiling: 0
+ m_AutoTiling: 0
+ m_Size: {x: 1.97, y: 10.8}
+ m_EdgeRadius: 0
+--- !u!212 &1965895508
+SpriteRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1965895504}
+ m_Enabled: 0
+ 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_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2}
+ 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: 4
+ m_Sprite: {fileID: 21300000, guid: e816a07ba153c4647b5544d5edd6d3c6, type: 3}
+ m_Color: {r: 1, g: 1, b: 1, a: 0.3529412}
+ m_FlipX: 0
+ m_FlipY: 0
+ m_DrawMode: 0
+ m_Size: {x: 11.99, y: 10.8}
+ m_AdaptiveModeThreshold: 0.5
+ m_SpriteTileMode: 0
+ m_WasSpriteAssigned: 1
+ m_MaskInteraction: 0
+ m_SpriteSortPoint: 0
--- !u!224 &1970322402 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 4530472541819974216, guid: 542ea48079cbe3b4cb76c62c842e1175, type: 3}
diff --git a/Assets/idolsDisplay/UI_Idols.cs b/Assets/idolsDisplay/UI_Idols.cs
index 499e6dd6..ac0ec785 100644
--- a/Assets/idolsDisplay/UI_Idols.cs
+++ b/Assets/idolsDisplay/UI_Idols.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
@@ -86,12 +87,14 @@ public class UI_Idols : MonoBehaviour
private bool suppressToggleCallbacks;
private int pendingGrowthAnimationHeroId = -1;
private Tween idolExpBarTween;
+ private Coroutine startupSkillValidationRoutine;
private void Start()
{
BindQuitButton();
InitializeSectionToggles();
RebuildCards();
+ BeginStartupSkillValidation();
}
private void OnEnable()
@@ -123,6 +126,11 @@ public class UI_Idols : MonoBehaviour
idolExpBarTween.Kill();
idolExpBarTween = null;
}
+ if (startupSkillValidationRoutine != null)
+ {
+ StopCoroutine(startupSkillValidationRoutine);
+ startupSkillValidationRoutine = null;
+ }
UnbindSectionToggles();
}
@@ -152,6 +160,37 @@ public class UI_Idols : MonoBehaviour
gameObject.SetActive(false);
}
+ private void BeginStartupSkillValidation()
+ {
+ if (!isActiveAndEnabled)
+ {
+ return;
+ }
+
+ if (startupSkillValidationRoutine != null)
+ {
+ StopCoroutine(startupSkillValidationRoutine);
+ }
+
+ startupSkillValidationRoutine = StartCoroutine(ValidateSkillsOnStartupRoutine());
+ }
+
+ private IEnumerator ValidateSkillsOnStartupRoutine()
+ {
+ yield return null;
+
+ bool anyChanged = false;
+ yield return AllyHeroSkillSelectionValidator.ValidateAllHeroesAsync(2, changed => anyChanged = changed);
+ startupSkillValidationRoutine = null;
+
+ if (!anyChanged)
+ {
+ yield break;
+ }
+
+ RebuildCards(false);
+ }
+
private void InitializeSectionToggles()
{
BindSectionToggles();
diff --git a/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs b/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs
new file mode 100644
index 00000000..b87b1f6f
--- /dev/null
+++ b/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+public static class AllyHeroSkillSelectionValidator
+{
+ public static IEnumerator ValidateAllHeroesAsync(int heroesPerFrame = 2, Action onCompleted = null)
+ {
+ AllyHero_SO[] heroes = RuntimeResourcesCache.LoadAllAllyHeroes();
+ bool anyChanged = false;
+ int processedThisFrame = 0;
+ int batchSize = Mathf.Max(1, heroesPerFrame);
+
+ for (int i = 0; i < heroes.Length; i++)
+ {
+ AllyHero_SO hero = heroes[i];
+ if (hero != null && hero.ValidateEquippedSkillSelections())
+ {
+ anyChanged = true;
+ }
+
+ processedThisFrame++;
+ if (processedThisFrame >= batchSize)
+ {
+ processedThisFrame = 0;
+ yield return null;
+ }
+ }
+
+ onCompleted?.Invoke(anyChanged);
+ }
+}
diff --git a/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs.meta b/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs.meta
new file mode 100644
index 00000000..bc3462f8
--- /dev/null
+++ b/Assets/scripts/Data/AllyHeroSkillSelectionValidator.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: aebb9d085d6f9c14fa7ff27d1b4e6e03
\ No newline at end of file
diff --git a/Assets/scripts/Data/AllyHero_SO.cs b/Assets/scripts/Data/AllyHero_SO.cs
index 6e0e1547..60c42294 100644
--- a/Assets/scripts/Data/AllyHero_SO.cs
+++ b/Assets/scripts/Data/AllyHero_SO.cs
@@ -189,6 +189,77 @@ public class AllyHero_SO : ScriptableObject
return EquipmentSkillGroupLibrary.ResolveSkillGroup(groupID);
}
+ public bool ValidateEquippedSkillSelections(bool persistIfChanged = true)
+ {
+ LoadEquippedSkillsFromLocal();
+ LoadEquippedEquipmentFromLocal();
+
+ if (equippedSkillGroupIDs == null)
+ {
+ equippedSkillGroupIDs = Array.Empty();
+ }
+
+ int currentLevelId = GetEffectiveLevelForCurrentEXP()?.levelID ?? 0;
+ int maxSkillSlots = Mathf.Max(0, GetEffectiveSkillSlotLimit());
+ List validatedGroupIds = new List(Mathf.Min(equippedSkillGroupIDs.Length, maxSkillSlots));
+ HashSet seenGroupIds = new HashSet();
+
+ for (int i = 0; i < equippedSkillGroupIDs.Length; i++)
+ {
+ int groupId = equippedSkillGroupIDs[i];
+ if (groupId <= 0 || !seenGroupIds.Add(groupId))
+ {
+ continue;
+ }
+
+ if (validatedGroupIds.Count >= maxSkillSlots)
+ {
+ continue;
+ }
+
+ SkillGroup group = GetOwnedSkillGroupByID(groupId);
+ if (group == null)
+ {
+ continue;
+ }
+
+ int requiredLevelId = Mathf.Clamp(group.thisSkill_levelLimit, 1, 4);
+ if (currentLevelId < requiredLevelId)
+ {
+ continue;
+ }
+
+ validatedGroupIds.Add(groupId);
+ }
+
+ int[] validatedArray = validatedGroupIds.ToArray();
+ bool changed = !AreSkillGroupIdArraysEqual(equippedSkillGroupIDs, validatedArray);
+ if (!changed)
+ {
+ return false;
+ }
+
+ equippedSkillGroupIDs = validatedArray;
+
+ if (persistIfChanged)
+ {
+ SaveEquippedSkillsToLocal();
+ }
+
+#if UNITY_EDITOR
+ if (!Application.isPlaying)
+ {
+ EditorUtility.SetDirty(this);
+ if (persistIfChanged)
+ {
+ AssetDatabase.SaveAssets();
+ }
+ }
+#endif
+
+ return true;
+ }
+
public int[] GetEffectiveEquippedSkillGroupIDs()
{
var result = new List();
@@ -365,6 +436,45 @@ public class AllyHero_SO : ScriptableObject
result.Add(groupId);
}
+ private static bool AreSkillGroupIdArraysEqual(int[] left, int[] right)
+ {
+ int leftLength = left != null ? left.Length : 0;
+ int rightLength = right != null ? right.Length : 0;
+ if (leftLength != rightLength)
+ {
+ return false;
+ }
+
+ for (int i = 0; i < leftLength; i++)
+ {
+ if (left[i] != right[i])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private SkillGroup GetOwnedSkillGroupByID(int groupId)
+ {
+ if (skillGroups == null || skillGroups.Length == 0)
+ {
+ return null;
+ }
+
+ for (int i = 0; i < skillGroups.Length; i++)
+ {
+ SkillGroup group = skillGroups[i];
+ if (group != null && group.skillGroupID == groupId)
+ {
+ return group;
+ }
+ }
+
+ return null;
+ }
+
public int GetUnlockedLevelIndex()
{
List sorted = BuildSortedLevelStats();
diff --git a/Assets/scripts/Team/newTeamSelector.cs b/Assets/scripts/Team/newTeamSelector.cs
index 304e9dcb..e1b51481 100644
--- a/Assets/scripts/Team/newTeamSelector.cs
+++ b/Assets/scripts/Team/newTeamSelector.cs
@@ -47,6 +47,7 @@ public class newTeamSelector : MonoBehaviour
private static AllyHero_SO[] cachedHeroes;
private static Dictionary cachedHeroesById;
private Coroutine refreshSkillsRoutine;
+ private Coroutine startupSkillValidationRoutine;
void Awake()
{
@@ -65,14 +66,24 @@ public class newTeamSelector : MonoBehaviour
{
RefreshTeamShareCodeDisplay();
if (instantiateOnStart)
+ {
CreateSlots();
- StartCoroutine(LoadSelectedHeroesNextFrame());
+ }
+
+ if (startupSkillValidationRoutine != null)
+ {
+ StopCoroutine(startupSkillValidationRoutine);
+ }
+
+ startupSkillValidationRoutine = StartCoroutine(StartupLoadRoutine());
}
- private IEnumerator LoadSelectedHeroesNextFrame()
+ private IEnumerator StartupLoadRoutine()
{
yield return null;
+ yield return AllyHeroSkillSelectionValidator.ValidateAllHeroesAsync();
LoadSelectedHeroes();
+ startupSkillValidationRoutine = null;
}
public void CreateSlots()
diff --git a/Assets/scripts/UI/PauseManager.cs b/Assets/scripts/UI/PauseManager.cs
index 87eb893f..a869b7ab 100644
--- a/Assets/scripts/UI/PauseManager.cs
+++ b/Assets/scripts/UI/PauseManager.cs
@@ -33,6 +33,8 @@ public class PauseManager : MonoBehaviour
[Header("Buttons")]
[SerializeField] private string pauseButtonScenePath = "artworks/NEW UI/zhuangshi (3)/Pause";
+ [Tooltip("手游暂停按钮:把场景里的暂停 Button 拖到这里,点击效果等同 ESC。\n" +
+ "留空则按 pauseButtonScenePath 或名为 \"Pause\" 的按钮自动查找。")]
[SerializeField] private Button pauseTriggerButton;
[SerializeField] private Button continueButton;
[SerializeField] private Button replayButton;
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs b/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs
new file mode 100644
index 00000000..c2e4e847
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs
@@ -0,0 +1,182 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+///
+/// 手游触屏输入分发器:每帧遍历所有触摸点(及编辑器鼠标),用 Physics2D.OverlapPoint
+/// 命中带 TrackTouchZone 的透明 Collider2D,把按下/抬起转发给 InputManager。
+///
+/// 为什么用这种方式而不是 UI 的 IPointerDownHandler:
+/// - 轨道会平移+旋转晃动,点击区必须跟随晃动的 Collider(OverlapPoint 支持旋转过的碰撞体)。
+/// - 需要多点触控:每根手指独立按住各自的轨道(靠 fingerId 配对按下/抬起)。
+///
+/// 判定逻辑完全不变:这里只调用现成的 PressTrack/ReleaseTrack,
+/// 判定时间戳仍由 Note.HandlePress 读取 GameplayClock.NowSongTime(dspTime)。
+///
+/// 用法:场景里放一个空物体挂本脚本,把主相机拖到 gameplayCamera(留空则自动取 Camera.main)。
+/// 5 块透明轨道点击区各挂 TrackTouchZone 并设置 trackIndex。
+///
+public class TrackTouchInput : MonoBehaviour
+{
+ [Tooltip("渲染 gameplay 的相机。留空则自动使用 Camera.main。")]
+ [SerializeField] private Camera gameplayCamera;
+
+ [Tooltip("是否在编辑器/PC 上用鼠标模拟单点触摸(方便调试)。")]
+ [SerializeField] private bool enableMouseFallback = true;
+
+ [Tooltip("命中检测使用的层。默认 Everything;如需只检测点击区层可在此限制。")]
+ [SerializeField] private LayerMask hitLayers = ~0;
+
+ [Tooltip("透视相机必填:轨道点击区所在平面的世界 Z 坐标(轨道 Collider 的 Z)。\n" +
+ "透视相机下屏幕点转世界点依赖深度,用它把射线交到轨道平面,相机怎么晃/推拉都精确。\n" +
+ "正交相机可忽略此项。")]
+ [SerializeField] private float trackPlaneWorldZ = 0f;
+
+ [Tooltip("相机是否为正交投影。正交相机忽略深度,命中转换更简单。\n" +
+ "留空自动按相机 orthographic 判断;一般不用手动改。")]
+ [SerializeField] private bool forceOrthographicMode = false;
+
+ // fingerId -> 当前按住的轨道索引。用于在抬起/取消时精确释放对应轨道。
+ private readonly Dictionary _activeTouches = new Dictionary();
+ // 鼠标模拟用的"手指 id",取一个不会和真实 fingerId 冲突的值。
+ private const int MouseFingerId = -100;
+ private int _mouseHeldTrack = -1;
+
+ private Camera Cam
+ {
+ get
+ {
+ if (gameplayCamera == null) gameplayCamera = Camera.main;
+ return gameplayCamera;
+ }
+ }
+
+ private void Update()
+ {
+ var im = InputManager.Instance;
+ if (im == null) return;
+
+ Camera cam = Cam;
+ if (cam == null) return;
+
+ ProcessTouches(im, cam);
+
+ if (enableMouseFallback && Input.touchCount == 0)
+ {
+ ProcessMouse(im, cam);
+ }
+ }
+
+ private void ProcessTouches(InputManager im, Camera cam)
+ {
+ for (int i = 0; i < Input.touchCount; i++)
+ {
+ Touch t = Input.GetTouch(i);
+
+ switch (t.phase)
+ {
+ case TouchPhase.Began:
+ {
+ int track = ResolveTrack(cam, t.position);
+ if (track >= 0)
+ {
+ _activeTouches[t.fingerId] = track;
+ im.PressTrack(track);
+ }
+ break;
+ }
+ case TouchPhase.Ended:
+ case TouchPhase.Canceled:
+ {
+ if (_activeTouches.TryGetValue(t.fingerId, out int track))
+ {
+ _activeTouches.Remove(t.fingerId);
+ im.ReleaseTrack(track);
+ }
+ break;
+ }
+ // Moved / Stationary:手指在轨道内保持按住即可,不重新判定归属,
+ // 避免手指轻微滑动跨到相邻轨道时反复 Press/Release 造成误判。
+ }
+ }
+ }
+
+ private void ProcessMouse(InputManager im, Camera cam)
+ {
+ if (Input.GetMouseButtonDown(0))
+ {
+ int track = ResolveTrack(cam, Input.mousePosition);
+ if (track >= 0)
+ {
+ _mouseHeldTrack = track;
+ im.PressTrack(track);
+ }
+ }
+ else if (Input.GetMouseButtonUp(0))
+ {
+ if (_mouseHeldTrack >= 0)
+ {
+ im.ReleaseTrack(_mouseHeldTrack);
+ _mouseHeldTrack = -1;
+ }
+ }
+ }
+
+ ///
+ /// 把屏幕坐标转换为轨道平面上的世界点,用 OverlapPoint 命中轨道点击区,返回轨道索引;无命中返回 -1。
+ ///
+ /// 相机移动/晃动/推拉时,每帧都用当前相机状态转换,所以命中自动跟随相机。
+ /// - 正交相机:ScreenToWorldPoint 忽略深度,直接取 x/y。
+ /// - 透视相机:从相机发射线,求与轨道平面(Z = trackPlaneWorldZ)的交点,
+ /// 避免因相机 Z 变化(如 cameraDash)导致命中点偏移。
+ ///
+ private int ResolveTrack(Camera cam, Vector2 screenPos)
+ {
+ Vector2 point;
+
+ if (forceOrthographicMode || cam.orthographic)
+ {
+ Vector3 world = cam.ScreenToWorldPoint(screenPos);
+ point = new Vector2(world.x, world.y);
+ }
+ else
+ {
+ // 透视:射线与轨道平面(法线 +Z,过 z = trackPlaneWorldZ)求交。
+ Ray ray = cam.ScreenPointToRay(screenPos);
+ float denom = ray.direction.z;
+ if (Mathf.Abs(denom) < 1e-6f)
+ {
+ return -1; // 射线与平面近乎平行,无有效交点
+ }
+ float t = (trackPlaneWorldZ - ray.origin.z) / denom;
+ if (t < 0f)
+ {
+ return -1; // 交点在相机背后
+ }
+ Vector3 world = ray.origin + ray.direction * t;
+ point = new Vector2(world.x, world.y);
+ }
+
+ Collider2D hit = Physics2D.OverlapPoint(point, hitLayers);
+ if (hit == null) return -1;
+
+ TrackTouchZone zone = hit.GetComponent();
+ if (zone == null) zone = hit.GetComponentInParent();
+ return zone != null ? zone.trackIndex : -1;
+ }
+
+ private void OnDisable()
+ {
+ // 组件被关闭/切场景时,释放所有还按住的轨道,避免音符卡在 held 状态。
+ var im = InputManager.Instance;
+ if (im != null)
+ {
+ foreach (var kv in _activeTouches)
+ {
+ im.ReleaseTrack(kv.Value);
+ }
+ if (_mouseHeldTrack >= 0) im.ReleaseTrack(_mouseHeldTrack);
+ }
+ _activeTouches.Clear();
+ _mouseHeldTrack = -1;
+ }
+}
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs.meta b/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs.meta
new file mode 100644
index 00000000..290c0cf0
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchInput.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 16d03d0d613217b4ebdba1b8b63bf735
\ No newline at end of file
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs b/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs
new file mode 100644
index 00000000..ffcebbe4
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs
@@ -0,0 +1,118 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+///
+/// Binds five pre-authored UI touch regions to the existing gameplay input path.
+/// This script does not create runtime objects. You assign the region RectTransforms
+/// in the inspector, and it ensures each one has an Image raycast target plus a
+/// TrackTouchRegion configured with the matching track index.
+///
+[DisallowMultipleComponent]
+public class TrackTouchRegionLayoutController : MonoBehaviour
+{
+ [Serializable]
+ public class RegionBinding
+ {
+ [Range(0, 4)]
+ public int trackIndex;
+
+ [Tooltip("Pre-authored UI region to bind. Assign in inspector.")]
+ public RectTransform regionObject;
+
+ [Tooltip("Optional debug tint. Alpha 0 keeps the region invisible while preserving raycasts.")]
+ public Color debugTint = new Color(1f, 1f, 1f, 0f);
+ }
+
+ [Header("Behavior")]
+ public bool bindOnStart = true;
+ public bool mobileOnly = true;
+
+ [Header("Prebound Regions")]
+ public RegionBinding[] regions = new RegionBinding[5];
+
+ private void Reset()
+ {
+ EnsureDefaultBindings();
+ }
+
+ private void Awake()
+ {
+ EnsureDefaultBindings();
+ }
+
+ private void Start()
+ {
+ if (!bindOnStart)
+ {
+ return;
+ }
+
+ if (mobileOnly && !Application.isMobilePlatform)
+ {
+ return;
+ }
+
+ ApplyBindings();
+ }
+
+ [ContextMenu("Apply Touch Region Bindings")]
+ public void ApplyBindings()
+ {
+ EnsureDefaultBindings();
+
+ for (int i = 0; i < regions.Length; i++)
+ {
+ BindRegion(regions[i], i);
+ }
+ }
+
+ private void EnsureDefaultBindings()
+ {
+ if (regions == null || regions.Length != 5)
+ {
+ regions = new RegionBinding[5];
+ }
+
+ for (int i = 0; i < regions.Length; i++)
+ {
+ if (regions[i] == null)
+ {
+ regions[i] = new RegionBinding();
+ }
+
+ regions[i].trackIndex = Mathf.Clamp(i, 0, 4);
+ }
+ }
+
+ private static void BindRegion(RegionBinding binding, int fallbackTrackIndex)
+ {
+ if (binding == null || binding.regionObject == null)
+ {
+ return;
+ }
+
+ int trackIndex = Mathf.Clamp(binding.trackIndex, 0, 4);
+ if (trackIndex != fallbackTrackIndex)
+ {
+ trackIndex = Mathf.Clamp(trackIndex, 0, 4);
+ }
+
+ Image image = binding.regionObject.GetComponent();
+ if (image == null)
+ {
+ image = binding.regionObject.gameObject.AddComponent();
+ }
+
+ image.color = binding.debugTint;
+ image.raycastTarget = true;
+
+ TrackTouchRegion touchRegion = binding.regionObject.GetComponent();
+ if (touchRegion == null)
+ {
+ touchRegion = binding.regionObject.gameObject.AddComponent();
+ }
+
+ touchRegion.trackIndex = trackIndex;
+ }
+}
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs.meta b/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs.meta
new file mode 100644
index 00000000..c21a2d0b
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchRegionLayoutController.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 4d4eeea52b79c624bbd827fba1ce5029
\ No newline at end of file
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs b/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs
new file mode 100644
index 00000000..75f0dfd1
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs
@@ -0,0 +1,60 @@
+using UnityEngine;
+
+///
+/// 挂在一块"透明可点击区域"物体上,标记它对应哪条轨道(0-4)。
+/// 该物体需带一个 Collider2D(推荐 BoxCollider2D,可旋转)。
+///
+/// 两种跟随晃动的方式:
+/// A) 直接把本物体作为会晃动的轨道 GameObject 的子物体 —— Unity 自动跟随平移+旋转,
+/// 不需要 followTarget,留空即可。
+/// B) 无法作为子物体时,把会晃动的轨道 Transform 拖到 followTarget,
+/// 本脚本会在 LateUpdate 中把自身对齐到它(位置+旋转),保证点击区跟着晃。
+///
+/// 判定完全不经过这里:命中检测由 TrackTouchInput 遍历触摸完成,
+/// 只调用 InputManager.PressTrack/ReleaseTrack,判定时机仍走 dspTime。
+///
+[RequireComponent(typeof(Collider2D))]
+public class TrackTouchZone : MonoBehaviour
+{
+ [Tooltip("本区域控制的轨道:0=红 1=绿 2=黄 3=紫 4=蓝")]
+ [Range(0, 4)]
+ public int trackIndex = 0;
+
+ [Tooltip("可选。若本物体不是轨道的子物体,把会晃动的轨道 Transform 拖到这里,区域会每帧对齐到它(位置+旋转)。")]
+ public Transform followTarget;
+
+ [Tooltip("followTarget 生效时,是否同步旋转(轨道会旋转时勾上)。")]
+ public bool followRotation = true;
+
+ private Collider2D _collider;
+
+ public Collider2D Collider
+ {
+ get
+ {
+ if (_collider == null) _collider = GetComponent();
+ return _collider;
+ }
+ }
+
+ private void Awake()
+ {
+ _collider = GetComponent();
+ }
+
+ private void LateUpdate()
+ {
+ // 在所有晃动逻辑(Update)之后对齐,避免落后一帧。
+ if (followTarget == null) return;
+
+ transform.position = new Vector3(
+ followTarget.position.x,
+ followTarget.position.y,
+ transform.position.z);
+
+ if (followRotation)
+ {
+ transform.rotation = followTarget.rotation;
+ }
+ }
+}
diff --git a/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs.meta b/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs.meta
new file mode 100644
index 00000000..eb8fc6fe
--- /dev/null
+++ b/Assets/scripts/gamePlay_gameplay/TrackTouchZone.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 51fe12fce9a3cec41bb85f2ed4d0e5e3
\ No newline at end of file
diff --git a/Assets/scripts/settings/StartupSettingsApplier.cs b/Assets/scripts/settings/StartupSettingsApplier.cs
index d8f7e578..dd90ab89 100644
--- a/Assets/scripts/settings/StartupSettingsApplier.cs
+++ b/Assets/scripts/settings/StartupSettingsApplier.cs
@@ -35,10 +35,22 @@ public sealed class StartupSettingsApplier : MonoBehaviour
private void ApplyStartupSettings()
{
+ ApplyAndroidLandscapeOrientation();
graphicSettings.ApplySavedDisplaySettingsAtStartup(this);
ApplySavedAudioSettings();
}
+ private void ApplyAndroidLandscapeOrientation()
+ {
+#if UNITY_ANDROID && !UNITY_EDITOR
+ Screen.autorotateToPortrait = false;
+ Screen.autorotateToPortraitUpsideDown = false;
+ Screen.autorotateToLandscapeLeft = true;
+ Screen.autorotateToLandscapeRight = true;
+ Screen.orientation = ScreenOrientation.AutoRotation;
+#endif
+ }
+
private void ApplySavedAudioSettings()
{
audioSettingsPreloader[] preloaders = FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None);
diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset
index 071530ab..5a2a9635 100644
--- a/ProjectSettings/PackageManagerSettings.asset
+++ b/ProjectSettings/PackageManagerSettings.asset
@@ -18,7 +18,7 @@ MonoBehaviour:
m_SeeAllPackageVersions: 0
m_DismissPreviewPackagesInUse: 0
oneTimeWarningShown: 0
- oneTimeDeprecatedPopUpShown: 0
+ oneTimeDeprecatedPopUpShown: 1
m_Registries:
- m_Id: main
m_Name:
@@ -32,6 +32,6 @@ MonoBehaviour:
m_RegistryInfoDraft:
m_Modified: 0
m_ErrorMessage:
- m_UserModificationsInstanceId: -890
- m_OriginalInstanceId: -892
+ m_UserModificationsInstanceId: -874
+ m_OriginalInstanceId: -876
m_LoadAssets: 0