diff --git a/Assets/AddressableAssetsData/link.xml b/Assets/AddressableAssetsData/link.xml deleted file mode 100644 index 86fb27c7..00000000 --- a/Assets/AddressableAssetsData/link.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/Assets/Resources/song_songIndex/1002002_arcstar.asset b/Assets/Resources/song_songIndex/1002002_arcstar.asset index 8aef787d..9a41b09a 100644 --- a/Assets/Resources/song_songIndex/1002002_arcstar.asset +++ b/Assets/Resources/song_songIndex/1002002_arcstar.asset @@ -24,7 +24,7 @@ MonoBehaviour: songDuration: 0 game_enterTimes: 0 time_totalPlayingTime: 0 - illustration: {fileID: 21300000, guid: 7c7470553b303ec47a37d165b9abf25b, type: 3} + illustration: {fileID: 21300000, guid: 9732ceca4a8f8ab419584bd34710c04a, type: 3} backgroudPIC: {fileID: 21300000, guid: 74fa328982601a6408429444ca37ff20, type: 3} fullscreen_songPicture: {fileID: 21300000, guid: ff00d514e93546640a9bfc0ad90cd1c3, type: 3} card_profileImage: {fileID: 21300000, guid: e305e86aa87fd224ba9bc6d119714016, type: 3} diff --git a/Assets/Resources/song_songIndex/1002004_smile.asset b/Assets/Resources/song_songIndex/1002004_smile.asset index 9b57d8bd..5d0727a0 100644 --- a/Assets/Resources/song_songIndex/1002004_smile.asset +++ b/Assets/Resources/song_songIndex/1002004_smile.asset @@ -107,6 +107,6 @@ MonoBehaviour: current_levelProgress: 0 _if_level_is_EASE: 0 max_comboRecord: 0 - thisLevel_selectedDifficultyID: 0 + thisLevel_selectedDifficultyID: 2 thisLevel_addDateString: thisLevel_overallDescription: "\u201C\u53F2\u8BD7\u8FDC\u5F81\u201D\u8D5B\u4E8B\u7684\u5F00\u573A\u5E18\u5E55\u88AB\u7F13\u7F13\u62C9\u5F00\uFF0C\u5973\u5B69\u5750\u5728\u8282\u8282\u76F8\u6263\u7684\u9F7F\u8F6E\u8FB9\u4E0A\uFF0C\u800C\u5728\u5979\u7684\u773C\u4E0B\uFF0C\u4FBF\u662F\u65E9\u5DF2\u6253\u5F97\u70ED\u706B\u671D\u5929\u7684\u8D5B\u573A\u3002" diff --git a/Assets/Scenes/Main_main.unity b/Assets/Scenes/Main_main.unity index c9ae94e4..52d2f37b 100644 --- a/Assets/Scenes/Main_main.unity +++ b/Assets/Scenes/Main_main.unity @@ -1329,6 +1329,51 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 623677385} m_CullTransparentMesh: 1 +--- !u!1 &660142306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 660142308} + - component: {fileID: 660142307} + m_Layer: 0 + m_Name: steamCheck + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &660142307 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660142306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ed7660afeb4cd124f892e60c28d0cb85, type: 3} + m_Name: + m_EditorClassIdentifier: + welcomeText: {fileID: 1364307997} +--- !u!4 &660142308 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 660142306} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.1869494, y: 2.7269337, z: 0.84016913} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &719193750 GameObject: m_ObjectHideFlags: 0 @@ -2859,6 +2904,7 @@ RectTransform: - {fileID: 92875213} - {fileID: 1169972662} - {fileID: 726773049} + - {fileID: 1364307996} - {fileID: 308199596} - {fileID: 719193751} - {fileID: 1901335929} @@ -3305,6 +3351,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1274601002} m_CullTransparentMesh: 1 +--- !u!1 &1364307995 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1364307996} + - component: {fileID: 1364307998} + - component: {fileID: 1364307997} + m_Layer: 5 + m_Name: uid + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1364307996 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364307995} + 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: 1169725030} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 598.74, y: 249} + m_SizeDelta: {x: -1229.79, y: -1050} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1364307997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364307995} + 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: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 5 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: uid +--- !u!222 &1364307998 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1364307995} + m_CullTransparentMesh: 1 --- !u!1 &1401636779 GameObject: m_ObjectHideFlags: 0 @@ -5070,3 +5195,4 @@ SceneRoots: - {fileID: 1933384116} - {fileID: 1169725030} - {fileID: 387952725} + - {fileID: 660142308} diff --git a/Assets/Scenes/gamePlay_gamePlay.unity b/Assets/Scenes/gamePlay_gamePlay.unity index dc7f3218..622fda79 100644 --- a/Assets/Scenes/gamePlay_gamePlay.unity +++ b/Assets/Scenes/gamePlay_gamePlay.unity @@ -1599,7 +1599,7 @@ MonoBehaviour: m_EditorClassIdentifier: slotIndex: 0 maxHP: 0 - currentHP: 1 + currentHP: 0 maxMana: 0 currentMana: 0 damageResistance: 0 @@ -14014,6 +14014,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!61 &359012524 BoxCollider2D: @@ -14266,7 +14267,7 @@ MonoBehaviour: flashStartAlpha: 0.5 flashHoldTime: 0.1 flashFadeDuration: 0.2 - allySlotIds: f9750000fb750000fa750000f9750000fb750000 + allySlotIds: 0000000000000000000000000000000000000000 enemySlotIds: e1790000e2790000000000000000000000000000 recognizedEnemySOs: [] editorSOFolderPath: Assets/Resources/so/ally @@ -14779,6 +14780,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!1 &370051274 GameObject: @@ -15765,6 +15767,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -15799,6 +15803,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!61 &397604454 BoxCollider2D: @@ -15910,7 +15915,8 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: [] + m_Children: + - {fileID: 3577031888826609227} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &398515602 @@ -15955,6 +15961,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0.1 globalHitDelay: 0 + enableSyncNotePrefab: 1 + syncNotePrefab: {fileID: 1500140235766093525, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -16417,6 +16425,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -16497,6 +16507,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &411632598 MonoBehaviour: @@ -19486,6 +19497,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!61 &539645092 BoxCollider2D: @@ -27573,6 +27585,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!1 &715955930 GameObject: @@ -31878,7 +31891,7 @@ MonoBehaviour: settlementTeamLoader: {fileID: 754636335} mvp_hero_hd_image: {fileID: 205333303} moneyToGive_thisLevel: 0 - mvp_object: {fileID: 0} + mvp_object: {fileID: 270644561} mvp_score: {fileID: 1258959120} mvp_heroIcon: {fileID: 412605241} mvp_heroName: {fileID: 104530467} @@ -36969,6 +36982,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &1090508771 MonoBehaviour: @@ -36992,6 +37006,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -37334,6 +37350,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!61 &1102374851 BoxCollider2D: @@ -43530,7 +43547,7 @@ MonoBehaviour: m_EditorClassIdentifier: slotIndex: 3 maxHP: 0 - currentHP: 1 + currentHP: 0 maxMana: 0 currentMana: 0 damageResistance: 0 @@ -44695,6 +44712,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &1370459978 MonoBehaviour: @@ -44718,6 +44736,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -47222,6 +47242,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -47302,6 +47324,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &1486355887 MonoBehaviour: @@ -47563,7 +47586,7 @@ MonoBehaviour: m_EditorClassIdentifier: slotIndex: 2 maxHP: 0 - currentHP: 1 + currentHP: 0 maxMana: 0 currentMana: 0 damageResistance: 0 @@ -49072,6 +49095,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &1572820068 MonoBehaviour: @@ -49095,6 +49119,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -49972,7 +49998,7 @@ MonoBehaviour: m_EditorClassIdentifier: slotIndex: 1 maxHP: 0 - currentHP: 1 + currentHP: 0 maxMana: 0 currentMana: 0 damageResistance: 0 @@ -55761,7 +55787,7 @@ MonoBehaviour: m_EditorClassIdentifier: slotIndex: 4 maxHP: 0 - currentHP: 1 + currentHP: 0 maxMana: 0 currentMana: 0 damageResistance: 0 @@ -56951,6 +56977,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &1938112566 MonoBehaviour: @@ -56974,6 +57001,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -59906,6 +59935,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &2072610046 MonoBehaviour: @@ -59929,6 +59959,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -61048,6 +61080,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -61128,6 +61162,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &2112693517 MonoBehaviour: @@ -62344,6 +62379,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -63371,6 +63408,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -63451,6 +63490,7 @@ MonoBehaviour: type: judgeConfig: {fileID: 0} holdWindowMultiplier: 1.3 + holdAnimationPrefab: {fileID: 0} visualSpeedMultiplier: 1 --- !u!114 &2411783544221426197 MonoBehaviour: @@ -63905,6 +63945,11 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!4 &3577031888826609227 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + m_PrefabInstance: {fileID: 6488609446727138723} + m_PrefabAsset: {fileID: 0} --- !u!114 &3585825429454831658 MonoBehaviour: m_ObjectHideFlags: 0 @@ -64173,6 +64218,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -64806,6 +64853,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -65072,6 +65121,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 @@ -66077,6 +66128,67 @@ RectTransform: m_AnchoredPosition: {x: 55.959, y: -391.713} m_SizeDelta: {x: 111.918, y: 111.918} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &6488609446727138723 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 398515601} + m_Modifications: + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1257616023193076660, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1500140235766093525, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_Name + value: syncNoteSign + objectReference: {fileID: 0} + - target: {fileID: 1500140235766093525, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: fda9079aef7bc2d4385761036bedce3b, type: 3} --- !u!1 &6748722961914189943 GameObject: m_ObjectHideFlags: 0 @@ -67651,6 +67763,8 @@ MonoBehaviour: spawnOffset: 0.1 static_value_add_to_spawnoffset: 0 globalHitDelay: 0 + enableSyncNotePrefab: 0 + syncNotePrefab: {fileID: 0} speedMultiplier: 1 calibrateTolerance: 0.02 calibrateChecks: 2 diff --git a/Assets/Scenes/selectYourSongFirst.unity b/Assets/Scenes/selectYourSongFirst.unity index 23add851..f0f6dce8 100644 --- a/Assets/Scenes/selectYourSongFirst.unity +++ b/Assets/Scenes/selectYourSongFirst.unity @@ -9582,7 +9582,7 @@ RectTransform: 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: -269.79} + m_AnchoredPosition: {x: 0, y: -280} m_SizeDelta: {x: 294.354, y: 96.701} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1479851989 @@ -9767,7 +9767,7 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 12800000, guid: 8b8373b0af11dca46b89be60dbe469f8, type: 3} - m_FontSize: 16 + m_FontSize: 12 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 @@ -10000,7 +10000,7 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 12800000, guid: 8b8373b0af11dca46b89be60dbe469f8, type: 3} - m_FontSize: 16 + m_FontSize: 12 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 1 diff --git a/Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png b/Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png deleted file mode 100644 index 25cacfb2..00000000 Binary files a/Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png and /dev/null differ diff --git a/Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png b/Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png new file mode 100644 index 00000000..35ed8177 Binary files /dev/null and b/Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png differ diff --git a/Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png.meta b/Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png.meta similarity index 92% rename from Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png.meta rename to Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png.meta index 7007b185..a20b21f3 100644 --- a/Assets/__so/songs_so_res/1002002_Arcstar/矩形 43.png.meta +++ b/Assets/__so/songs_so_res/1002002_Arcstar/矩形 44.png.meta @@ -1,10 +1,10 @@ fileFormatVersion: 2 -guid: ce87b58f4fda5a44baf043e618efb9ae +guid: 9732ceca4a8f8ab419584bd34710c04a TextureImporter: internalIDToNameTable: - first: - 213: 4260502691013242705 - second: "\u77E9\u5F62 43_0" + 213: -2038485765235370501 + second: "\u77E9\u5F62 44_0" externalObjects: {} serializedVersion: 13 mipmaps: @@ -113,7 +113,7 @@ TextureImporter: serializedVersion: 2 sprites: - serializedVersion: 2 - name: "\u77E9\u5F62 43_0" + name: "\u77E9\u5F62 44_0" rect: serializedVersion: 2 x: 0 @@ -128,8 +128,8 @@ TextureImporter: physicsShape: [] tessellationDetail: -1 bones: [] - spriteID: 15fa076df98502b30800000000000000 - internalID: 4260502691013242705 + spriteID: bf594733ff7d5b3e0800000000000000 + internalID: -2038485765235370501 vertices: [] indices: edges: [] @@ -148,7 +148,7 @@ TextureImporter: spriteCustomMetadata: entries: [] nameFileIdTable: - "\u77E9\u5F62 43_0": 4260502691013242705 + "\u77E9\u5F62 44_0": -2038485765235370501 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png b/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png new file mode 100644 index 00000000..cfd5405c Binary files /dev/null and b/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png differ diff --git a/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png.meta b/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png.meta new file mode 100644 index 00000000..92e56981 --- /dev/null +++ b/Assets/artworks/gamePlay_gamePlay/notes/noteSign.png.meta @@ -0,0 +1,208 @@ +fileFormatVersion: 2 +guid: 43fef83abcb79c14585d8bd891457788 +TextureImporter: + internalIDToNameTable: + - first: + 213: -9022727688012548700 + second: 638da16d2d86a3e3d83bd866354b3da0_0 + - first: + 213: 5301532198467956497 + second: 638da16d2d86a3e3d83bd866354b3da0_1 + - first: + 213: 2586199416529793481 + second: 638da16d2d86a3e3d83bd866354b3da0_2 + 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 + 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: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + 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: + - serializedVersion: 2 + name: 638da16d2d86a3e3d83bd866354b3da0_0 + rect: + serializedVersion: 2 + x: 53 + y: 6 + width: 25 + height: 32 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4a53ee2e8f4d8c280800000000000000 + internalID: -9022727688012548700 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 638da16d2d86a3e3d83bd866354b3da0_1 + rect: + serializedVersion: 2 + x: 71 + y: 6 + width: 25 + height: 32 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 11f6afe1273d29940800000000000000 + internalID: 5301532198467956497 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 638da16d2d86a3e3d83bd866354b3da0_2 + rect: + serializedVersion: 2 + x: 89 + y: 6 + width: 25 + height: 32 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 9c1b494caa604e320800000000000000 + internalID: 2586199416529793481 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: + 638da16d2d86a3e3d83bd866354b3da0_0: -9022727688012548700 + 638da16d2d86a3e3d83bd866354b3da0_1: 5301532198467956497 + 638da16d2d86a3e3d83bd866354b3da0_2: 2586199416529793481 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab b/Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab new file mode 100644 index 00000000..a123bb49 --- /dev/null +++ b/Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab @@ -0,0 +1,89 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1500140235766093525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257616023193076660} + - component: {fileID: 4469342922229129182} + m_Layer: 0 + m_Name: syncNoteSign + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257616023193076660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500140235766093525} + 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: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &4469342922229129182 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500140235766093525} + 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_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: 6 + m_Sprite: {fileID: 21300000, guid: 43fef83abcb79c14585d8bd891457788, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.64, y: 0.44} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/Assets/AddressableAssetsData/link.xml.meta b/Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab.meta similarity index 62% rename from Assets/AddressableAssetsData/link.xml.meta rename to Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab.meta index b9b1db81..cbab3be2 100644 --- a/Assets/AddressableAssetsData/link.xml.meta +++ b/Assets/artworks/gamePlay_gamePlay/notes/syncNoteSign.prefab.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: c977f2a7bf7c2c246adf066311df6065 -TextScriptImporter: +guid: fda9079aef7bc2d4385761036bedce3b +PrefabImporter: externalObjects: {} userData: assetBundleName: diff --git a/Assets/delayTapperPrefab/delayTapperPrefab.cs b/Assets/delayTapperPrefab/delayTapperPrefab.cs index 2b120eb3..f786b042 100644 --- a/Assets/delayTapperPrefab/delayTapperPrefab.cs +++ b/Assets/delayTapperPrefab/delayTapperPrefab.cs @@ -55,6 +55,7 @@ public class delayTapperPrefab : MonoBehaviour private bool isPaused = false; private bool isRunning = false; private float currentElapsed = 0f; + private Dictionary originalMuteStates = new Dictionary(); private const string DELAY_PREFS_KEY = "UserGlobalDelaySeconds"; @@ -147,6 +148,55 @@ public class delayTapperPrefab : MonoBehaviour // 开始加载音频 StartCoroutine(PrepareAudioAndEnableButton()); + + // 查找场景中所有的 AudioSource 并将非指定的 AudioSource 静音 + MuteOtherAudioSources(); + } + + private void OnDestroy() + { + // 销毁时恢复音频源状态 + RestoreAudioSources(); + } + + private void MuteOtherAudioSources() + { + originalMuteStates.Clear(); + // 查找场景中所有的 AudioSource (包括非激活的) + AudioSource[] allAudioSources = FindObjectsOfType(true); + foreach (var asrc in allAudioSources) + { + // 如果是指定的两个音频源之一,不静音 + if (asrc == audioSource || asrc == hit_sfx_as) + { + // 确保它们是取消静音的,以便能听到声音 + asrc.mute = false; + continue; + } + + // 记录原始静音状态 + if (!originalMuteStates.ContainsKey(asrc)) + { + originalMuteStates[asrc] = asrc.mute; + asrc.mute = true; // 静音 + } + } + Debug.Log($"[delayTapperPrefab] 已静音 {originalMuteStates.Count} 个音频源"); + } + + private void RestoreAudioSources() + { + int restoredCount = 0; + foreach (var kvp in originalMuteStates) + { + if (kvp.Key != null) + { + kvp.Key.mute = kvp.Value; + restoredCount++; + } + } + originalMuteStates.Clear(); + Debug.Log($"[delayTapperPrefab] 已恢复 {restoredCount} 个音频源的静音状态"); } public void OnResetButtonClicked() diff --git a/Assets/scripts/Combat/AllyCombatant.cs b/Assets/scripts/Combat/AllyCombatant.cs index 97a7bf1d..630e199b 100644 --- a/Assets/scripts/Combat/AllyCombatant.cs +++ b/Assets/scripts/Combat/AllyCombatant.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -153,6 +153,22 @@ public class AllyCombatant : MonoBehaviour, ICombatant public AppliedEffect(EffectType t, float a) { effectType = t; amount = a; } } + private List<(iNumberPrefabController.InstantNumberType type, int val)> _queuedPopups = new List<(iNumberPrefabController.InstantNumberType, int)>(); + + public void QueueDamagePopup(iNumberPrefabController.InstantNumberType type, int val) + { + _queuedPopups.Add((type, val)); + } + + public void TriggerQueuedPopups() + { + foreach (var p in _queuedPopups) + { + iNumberPrefabController.SpawnForAllyStatic(slotIndex, p.type, p.val); + } + _queuedPopups.Clear(); + } + private void Awake() { // ensure GameObject name matches pattern so EffectSystem can find it @@ -236,10 +252,9 @@ public class AllyCombatant : MonoBehaviour, ICombatant if (allowOverwriteFromSO) InitializeStatsFromData(); - // Documentation text normalized. - // Documentation text normalized. - isDead = false; - currentHP = Mathf.Max(1, maxHP); + // Initialize status + isDead = (maxHP <= 0); + currentHP = maxHP; currentMana = 0; UpdateUIImmediate(); @@ -271,7 +286,8 @@ public class AllyCombatant : MonoBehaviour, ICombatant if (allowOverwriteFromSO) { InitializeStatsFromData(); - currentHP = Mathf.Max(1, maxHP); + currentHP = maxHP; + isDead = (maxHP <= 0); UpdateUIImmediate(); } @@ -1132,6 +1148,11 @@ public class AllyCombatant : MonoBehaviour, ICombatant // Public setters that update UI and optionally animate fade bars public void SetCurrentHP(int hp, bool animateFade = true) + { + SetCurrentHP(hp, animateFade, false); + } + + public void SetCurrentHP(int hp, bool animateFade, bool skipPopup) { if (isDead) return; // dead characters cannot change HP int old = currentHP; @@ -1141,7 +1162,7 @@ public class AllyCombatant : MonoBehaviour, ICombatant // Trigger HP changed events int delta = currentHP - old; - if (delta != 0) + if (delta != 0 && !skipPopup) { if (iNumberPrefabController.Instance != null) { @@ -1180,16 +1201,26 @@ public class AllyCombatant : MonoBehaviour, ICombatant // Internal HP modifier that does NOT apply heal multipliers (used by ReceiveHeal to avoid double rounding). private void ModifyHPRaw(int delta, bool animateFade = true) + { + ModifyHPRaw(delta, animateFade, false); + } + + private void ModifyHPRaw(int delta, bool animateFade, bool skipPopup) { if (isDead && delta > 0) { // cannot heal a dead unit return; } - SetCurrentHP(currentHP + delta, animateFade); + SetCurrentHP(currentHP + delta, animateFade, skipPopup); } public void ModifyHP(int delta, bool animateFade = true) + { + ModifyHP(delta, animateFade, false); + } + + public void ModifyHP(int delta, bool animateFade, bool skipPopup) { if (isDead && delta > 0) { @@ -1207,7 +1238,7 @@ public class AllyCombatant : MonoBehaviour, ICombatant delta = Mathf.CeilToInt(delta * mult); } } - ModifyHPRaw(delta, animateFade); + ModifyHPRaw(delta, animateFade, skipPopup); } public void SetMaxHP(int newMax, bool keepCurrentRatio = true) @@ -1528,12 +1559,12 @@ public class AllyCombatant : MonoBehaviour, ICombatant fadeManaImage.fillAmount = targetFill; } - public void ReceiveDamage(float amount, GameObject source) + public void ReceiveDamage(float amount, GameObject source, bool deferPopup = false) { - ReceiveDamageInternal(amount, source, true); + ReceiveDamageInternal(amount, source, true, deferPopup); } - private void ReceiveDamageInternal(float amount, GameObject source, bool allowRedirect) + private void ReceiveDamageInternal(float amount, GameObject source, bool allowRedirect, bool deferPopup) { if (IsDead) return; // dead characters cannot be hit if (allowRedirect && TryGetGlobalRedirectTargetForReceiverDamage(this, out var redirector)) @@ -1541,7 +1572,7 @@ public class AllyCombatant : MonoBehaviour, ICombatant ConsumeGlobalRedirect(redirector); if (redirector != null && redirector != this) { - redirector.ReceiveDamageInternal(amount, source, false); + redirector.ReceiveDamageInternal(amount, source, false, deferPopup); return; } // If redirector is self or invalid, consume redirect and continue to take damage normally. @@ -1555,22 +1586,49 @@ public class AllyCombatant : MonoBehaviour, ICombatant if (adj != null && adj != this) { ConsumeSelfDamageRedirectToAdjacent(); - adj.ReceiveDamageInternal(amount, source, false); + adj.ReceiveDamageInternal(amount, source, false, deferPopup); return; } } + int oldHP = currentHP; float effective = amount * (1f - damageResistance); int delta = Mathf.CeilToInt(effective); - ModifyHP(-delta, true); + ModifyHP(-delta, true, true); + + int actual = oldHP - currentHP; + if (actual != 0) + { + if (deferPopup) + { + QueueDamagePopup(iNumberPrefabController.InstantNumberType.Damage, -actual); + } + else + { + iNumberPrefabController.SpawnForAllyStatic(slotIndex, iNumberPrefabController.InstantNumberType.Damage, -actual); + } + } } - public void ReceiveHeal(float amount, GameObject source) + public void ReceiveHeal(float amount, GameObject source, bool deferPopup = false) { if (IsDead) return; // dead characters cannot be healed + int oldHP = currentHP; float mult = GetTotalHealReceivedMultiplier(); int delta = Mathf.CeilToInt(amount * mult); - ModifyHPRaw(delta, true); + ModifyHP(delta, true, true); + int actual = currentHP - oldHP; + if (actual != 0) + { + if (deferPopup) + { + QueueDamagePopup(iNumberPrefabController.InstantNumberType.Heal, actual); + } + else + { + iNumberPrefabController.SpawnForAllyStatic(slotIndex, iNumberPrefabController.InstantNumberType.Heal, actual); + } + } } public void ApplyBuff(Buff buff, GameObject source) diff --git a/Assets/scripts/Combat/CombatCommon.cs b/Assets/scripts/Combat/CombatCommon.cs index 67aeb9fe..a10fd277 100644 --- a/Assets/scripts/Combat/CombatCommon.cs +++ b/Assets/scripts/Combat/CombatCommon.cs @@ -52,8 +52,8 @@ public enum EffectType public interface ICombatant { - void ReceiveDamage(float amount, GameObject source); - void ReceiveHeal(float amount, GameObject source); + void ReceiveDamage(float amount, GameObject source, bool deferPopup = false); + void ReceiveHeal(float amount, GameObject source, bool deferPopup = false); void ApplyBuff(Buff buff, GameObject source); void RemoveBuff(string buffId); } diff --git a/Assets/scripts/Combat/EffectSystem.cs b/Assets/scripts/Combat/EffectSystem.cs index 75d62fb1..3ae39906 100644 --- a/Assets/scripts/Combat/EffectSystem.cs +++ b/Assets/scripts/Combat/EffectSystem.cs @@ -23,7 +23,6 @@ public class EffectSystem : MonoBehaviour private readonly List _cachedEnemies = new List(8); private readonly HashSet _awaitingHitFxTargets = new HashSet(); - private readonly Dictionary _pendingDamagePopupByTargetId = new Dictionary(64); private void Awake() { @@ -322,12 +321,6 @@ public class EffectSystem : MonoBehaviour { int before = ally.currentScore; ally.AddScoreDirect(Mathf.CeilToInt(amount)); - int delta = ally.currentScore - before; - if (delta != 0) - { - var type = delta > 0 ? iNumberPrefabController.InstantNumberType.IscorePlus : iNumberPrefabController.InstantNumberType.IscoreMinus; - iNumberPrefabController.SpawnForAllyStatic(ally.slotIndex, type, delta); - } } else { @@ -372,7 +365,7 @@ public class EffectSystem : MonoBehaviour if (duration <= 0f) { enemy.SetMaxHP(enemy.maxHP + delta, false); - if (delta > 0) enemy.currentHP = Mathf.Clamp(enemy.currentHP + delta, 0, enemy.maxHP); + if (delta > 0) enemy.ModifyHP(delta); iBudeffPrefabController.Instance?.RefreshEnemyNow(enemy); iBudeffPrefabController.Instance?.RegisterEnemyTimedEffect(enemy, PlayerBudeffIconType.ot_maxHP_up, delta, 0f); } @@ -1083,18 +1076,8 @@ public class EffectSystem : MonoBehaviour var comp = target.GetComponent(); if (comp != null) { - int beforeHP = 0; - if (targetAlly != null) beforeHP = targetAlly.currentHP; - else if (targetEnemy != null) beforeHP = targetEnemy.currentHP; - - comp.ReceiveDamage(amount, source); - - int afterHP = 0; - if (targetAlly != null) afterHP = targetAlly.currentHP; - else if (targetEnemy != null) afterHP = targetEnemy.currentHP; - - int actualDelta = beforeHP - afterHP; - if (actualDelta != 0) QueueOrSpawnDamagePopup(target, targetAlly, targetEnemy, actualDelta); + // Use deferPopup: true for synchronization with hit fx + comp.ReceiveDamage(amount, source, true); // Record stats if source is an ally if (source != null && target.GetComponent() != null) @@ -1124,26 +1107,8 @@ public class EffectSystem : MonoBehaviour var comp = target.GetComponent(); if (comp != null) { - var targetAlly = target.GetComponent(); - var targetEnemy = target.GetComponent(); - int beforeHP = 0; - if (targetAlly != null) beforeHP = targetAlly.currentHP; - else if (targetEnemy != null) beforeHP = targetEnemy.currentHP; - - comp.ReceiveHeal(amount, source); - - int afterHP = 0; - if (targetAlly != null) afterHP = targetAlly.currentHP; - else if (targetEnemy != null) afterHP = targetEnemy.currentHP; - - int actualDelta = afterHP - beforeHP; - if (actualDelta != 0) - { - if (targetAlly != null) - iNumberPrefabController.SpawnForAllyStatic(targetAlly.slotIndex, iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - else if (targetEnemy != null) - iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - } + // Use deferPopup: false for heals (usually immediate) + comp.ReceiveHeal(amount, source, false); // Record stats if source is an ally if (source != null) @@ -1208,7 +1173,9 @@ public class EffectSystem : MonoBehaviour } } - comp.ReceiveDamage(totalAmount, source); + comp.ReceiveDamage(totalAmount, source, false); + // No need to call TriggerQueuedPopups manually as deferPopup is false + if (source != null && targetEnemy != null) { var ally = source.GetComponent(); @@ -1255,19 +1222,9 @@ public class EffectSystem : MonoBehaviour } } - int beforeHP = 0; - if (targetAlly != null) beforeHP = targetAlly.currentHP; - else if (targetEnemy != null) beforeHP = targetEnemy.currentHP; - - comp.ReceiveDamage(perTick, source); - - int afterHP = 0; - if (targetAlly != null) afterHP = targetAlly.currentHP; - else if (targetEnemy != null) afterHP = targetEnemy.currentHP; - - int actualDelta = beforeHP - afterHP; - if (actualDelta != 0) QueueOrSpawnDamagePopup(target, targetAlly, targetEnemy, actualDelta); - + comp.ReceiveDamage(perTick, source, false); + // No need to call TriggerQueuedPopups manually as deferPopup is false + if (source != null && targetEnemy != null) { var ally = source.GetComponent(); @@ -1306,21 +1263,9 @@ public class EffectSystem : MonoBehaviour if (targetAlly != null) beforeHP = targetAlly.currentHP; else if (targetEnemy != null) beforeHP = targetEnemy.currentHP; - comp.ReceiveHeal(totalAmount, source); - - int afterHP = 0; - if (targetAlly != null) afterHP = targetAlly.currentHP; - else if (targetEnemy != null) afterHP = targetEnemy.currentHP; - - int actualDelta = afterHP - beforeHP; - if (actualDelta != 0) - { - if (targetAlly != null) - iNumberPrefabController.SpawnForAllyStatic(targetAlly.slotIndex, iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - else if (targetEnemy != null) - iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - } - + comp.ReceiveHeal(totalAmount, source, false); + // No need to call TriggerQueuedPopups manually as deferPopup is false + // Record stats if (source != null) { @@ -1339,25 +1284,9 @@ public class EffectSystem : MonoBehaviour { if (target == null) yield break; - int beforeHP = 0; - if (targetAllyHot != null) beforeHP = targetAllyHot.currentHP; - else if (targetEnemyHot != null) beforeHP = targetEnemyHot.currentHP; - - comp.ReceiveHeal(perTick, source); - - int afterHP = 0; - if (targetAllyHot != null) afterHP = targetAllyHot.currentHP; - else if (targetEnemyHot != null) afterHP = targetEnemyHot.currentHP; - - int actualDelta = afterHP - beforeHP; - if (actualDelta != 0) - { - if (targetAllyHot != null) - iNumberPrefabController.SpawnForAllyStatic(targetAllyHot.slotIndex, iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - else if (targetEnemyHot != null) - iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Heal, Mathf.Abs(actualDelta)); - } - + comp.ReceiveHeal(perTick, source, false); + // No need to call TriggerQueuedPopups manually as deferPopup is false + // Record stats if (source != null) { @@ -1382,47 +1311,19 @@ public class EffectSystem : MonoBehaviour int id = target.GetInstanceID(); if (_awaitingHitFxTargets.Contains(id)) _awaitingHitFxTargets.Remove(id); - if (!_pendingDamagePopupByTargetId.TryGetValue(id, out var signedValue) || signedValue == 0) return; - _pendingDamagePopupByTargetId.Remove(id); - - var ally = target.GetComponent(); - if (ally != null) + // Trigger any queued damage/heal popups now that the hit FX is playing + var enemy = target.GetComponent(); + if (enemy != null) { - iNumberPrefabController.SpawnForAllyStatic(ally.slotIndex, iNumberPrefabController.InstantNumberType.Damage, signedValue); - return; + enemy.TriggerQueuedPopups(); } - - if (target.GetComponent() != null) + else { - iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Damage, signedValue); - } - } - - private void QueueOrSpawnDamagePopup(GameObject target, AllyCombatant targetAlly, EnemyCombatant targetEnemy, int actualDelta) - { - if (target == null) return; - if (actualDelta == 0) return; - int id = target.GetInstanceID(); - int signedValue = -Mathf.Abs(actualDelta); - - if (_awaitingHitFxTargets.Contains(id)) - { - if (_pendingDamagePopupByTargetId.TryGetValue(id, out var prev)) - _pendingDamagePopupByTargetId[id] = prev + signedValue; - else - _pendingDamagePopupByTargetId[id] = signedValue; - return; - } - - if (targetAlly != null) - { - iNumberPrefabController.SpawnForAllyStatic(targetAlly.slotIndex, iNumberPrefabController.InstantNumberType.Damage, signedValue); - return; - } - - if (targetEnemy != null) - { - iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Damage, signedValue); + var ally = target.GetComponent(); + if (ally != null) + { + ally.TriggerQueuedPopups(); + } } } @@ -1443,14 +1344,7 @@ public class EffectSystem : MonoBehaviour // immediate add totalAmount to mana if ally present if (ally != null) { - int before = ally.currentMana; ally.ModifyMana(Mathf.CeilToInt(totalAmount), true, true); - int delta = ally.currentMana - before; - if (delta != 0) - { - var type = delta > 0 ? iNumberPrefabController.InstantNumberType.ManaPlus : iNumberPrefabController.InstantNumberType.ManaMinus; - iNumberPrefabController.SpawnForAllyStatic(ally.slotIndex, type, delta); - } // Record stats if (totalAmount > 0f && source != null) { @@ -1469,14 +1363,7 @@ public class EffectSystem : MonoBehaviour if (target == null) yield break; if (ally != null) { - int before = ally.currentMana; ally.ModifyMana(Mathf.CeilToInt(perTick), true, true); - int delta = ally.currentMana - before; - if (delta != 0) - { - var type = delta > 0 ? iNumberPrefabController.InstantNumberType.ManaPlus : iNumberPrefabController.InstantNumberType.ManaMinus; - iNumberPrefabController.SpawnForAllyStatic(ally.slotIndex, type, delta); - } // Record stats if (perTick > 0f && source != null) { @@ -1641,7 +1528,7 @@ public class EffectSystem : MonoBehaviour { if (enemy == null) yield break; enemy.SetMaxHP(Mathf.Max(1, enemy.maxHP + delta), false); - if (delta > 0) enemy.currentHP = Mathf.Clamp(enemy.currentHP + delta, 0, enemy.maxHP); + if (delta > 0) enemy.ModifyHP(delta); iBudeffPrefabController.Instance?.RefreshEnemyNow(enemy); yield return new WaitForSeconds(duration); if (enemy == null) yield break; diff --git a/Assets/scripts/Combat/EnemyCombatant.cs b/Assets/scripts/Combat/EnemyCombatant.cs index d7717f06..1ad4f929 100644 --- a/Assets/scripts/Combat/EnemyCombatant.cs +++ b/Assets/scripts/Combat/EnemyCombatant.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using UnityEngine; @@ -133,7 +133,7 @@ public class EnemyCombatant : MonoBehaviour, ICombatant } } - public void ReceiveDamage(float amount, GameObject source) + public void ReceiveDamage(float amount, GameObject source, bool deferPopup = false) { if (isDead) return; @@ -144,9 +144,23 @@ public class EnemyCombatant : MonoBehaviour, ICombatant } _lastAttacker = source; + int before = currentHP; float effective = amount * (1f - damageResistance); int delta = Mathf.CeilToInt(effective); - currentHP = Mathf.Clamp(currentHP - delta, 0, maxHP); + ModifyHP(-delta, true); + + int actual = before - currentHP; + if (actual != 0) + { + if (deferPopup) + { + QueueDamagePopup(iNumberPrefabController.InstantNumberType.Damage, -actual); + } + else + { + iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Damage, -actual); + } + } // grant mana based on sourceData setting if (sourceData != null && sourceData.manaGainOnDamagePercent > 0f && maxMana > 0) @@ -162,12 +176,25 @@ public class EnemyCombatant : MonoBehaviour, ICombatant } } - public void ReceiveHeal(float amount, GameObject source) + public void ReceiveHeal(float amount, GameObject source, bool deferPopup = false) { if (isDead) return; + int before = currentHP; float mult = GetTotalHealReceivedMultiplier(); int delta = Mathf.CeilToInt(amount * mult); - currentHP = Mathf.Clamp(currentHP + delta, 0, maxHP); + ModifyHP(delta, true); + int actual = currentHP - before; + if (actual != 0) + { + if (deferPopup) + { + QueueDamagePopup(iNumberPrefabController.InstantNumberType.Heal, actual); + } + else + { + iNumberPrefabController.SpawnForEnemyStatic(iNumberPrefabController.InstantNumberType.Heal, actual); + } + } } public void ApplyBuff(Buff buff, GameObject source) @@ -255,10 +282,38 @@ public class EnemyCombatant : MonoBehaviour, ICombatant RecalculateAttackFromBuffs(); } + private List<(iNumberPrefabController.InstantNumberType type, int val)> _queuedPopups = new List<(iNumberPrefabController.InstantNumberType, int)>(); + + public void QueueDamagePopup(iNumberPrefabController.InstantNumberType type, int val) + { + _queuedPopups.Add((type, val)); + } + + public void TriggerQueuedPopups() + { + foreach (var p in _queuedPopups) + { + iNumberPrefabController.SpawnForEnemyStatic(p.type, p.val); + } + _queuedPopups.Clear(); + } + public void ModifyHP(int delta) + { + ModifyHP(delta, false); + } + + public void ModifyHP(int delta, bool skipPopup) { if (isDead && delta > 0) return; + int before = currentHP; currentHP = Mathf.Clamp(currentHP + delta, 0, maxHP); + int actual = currentHP - before; + if (actual != 0 && !skipPopup) + { + var type = actual > 0 ? iNumberPrefabController.InstantNumberType.Heal : iNumberPrefabController.InstantNumberType.Damage; + iNumberPrefabController.SpawnForEnemyStatic(type, actual); + } if (currentHP <= 0) Die(); } @@ -267,6 +322,16 @@ public class EnemyCombatant : MonoBehaviour, ICombatant if (maxMana <= 0) return; int old = currentMana; currentMana = Mathf.Clamp(currentMana + delta, 0, maxMana); + int actual = currentMana - old; + + if (actual != 0) + { + if (iNumberPrefabController.Instance != null) + { + var type = actual > 0 ? iNumberPrefabController.InstantNumberType.ManaPlus : iNumberPrefabController.InstantNumberType.ManaMinus; + iNumberPrefabController.SpawnForEnemyStatic(type, actual); + } + } // If mana reached full, trigger primary skill and reset mana if (currentMana >= maxMana && maxMana > 0 && Application.isPlaying) @@ -283,7 +348,7 @@ public class EnemyCombatant : MonoBehaviour, ICombatant } // reset mana after casting - currentMana = 0; + ModifyMana(-currentMana, false); } } diff --git a/Assets/scripts/Combat/ScoreManager.cs b/Assets/scripts/Combat/ScoreManager.cs index 0b0ba3ab..aa73ec6a 100644 --- a/Assets/scripts/Combat/ScoreManager.cs +++ b/Assets/scripts/Combat/ScoreManager.cs @@ -380,8 +380,8 @@ public class ScoreManager : MonoBehaviour if (idolScoreSums[trackIndex] > int.MaxValue - 1) idolScoreSums[trackIndex] = int.MaxValue - 1; int idolActualDelta = idolScoreSums[trackIndex] - idolBefore; - // Only spawn popup if it is skill-related - if (isSkillRelated && idolActualDelta != 0) + // Spawn floating number popup for idol score change + if (idolActualDelta != 0) { var type = idolActualDelta > 0 ? iNumberPrefabController.InstantNumberType.IscorePlus : iNumberPrefabController.InstantNumberType.IscoreMinus; iNumberPrefabController.SpawnForAllyStatic(trackIndex, type, idolActualDelta); @@ -458,9 +458,17 @@ public class ScoreManager : MonoBehaviour if (trackIndex < 0 || trackIndex >= idolScoreSums.Length) return; if (idolDelta == 0) return; + int idolBefore = idolScoreSums[trackIndex]; idolScoreSums[trackIndex] += idolDelta; if (idolScoreSums[trackIndex] < 0) idolScoreSums[trackIndex] = 0; if (idolScoreSums[trackIndex] > int.MaxValue - 1) idolScoreSums[trackIndex] = int.MaxValue - 1; + int actual = idolScoreSums[trackIndex] - idolBefore; + + if (actual != 0) + { + var type = actual > 0 ? iNumberPrefabController.InstantNumberType.IscorePlus : iNumberPrefabController.InstantNumberType.IscoreMinus; + iNumberPrefabController.SpawnForAllyStatic(trackIndex, type, actual); + } red_idolScore_sum = idolScoreSums[0]; green_idolScore_sum = idolScoreSums[1]; diff --git a/Assets/scripts/Combat/SkillBuilder.cs b/Assets/scripts/Combat/SkillBuilder.cs index 1787b107..78caf715 100644 --- a/Assets/scripts/Combat/SkillBuilder.cs +++ b/Assets/scripts/Combat/SkillBuilder.cs @@ -1,14 +1,8 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; /// -/// Documentation text normalized. -/// Documentation text normalized. -/// Documentation text normalized. -/// Documentation text normalized. -/// -/// Documentation text normalized. /// SkillBuilder.Instance.ExecuteSkill("Fireball", EffectType.DamageSingleEnemy, 120f, Selector.CurrentEnemies, caster, target); /// Documentation text normalized. /// @@ -1003,7 +997,7 @@ public class SkillBuilder : MonoBehaviour else { enemy.SetMaxHP(Mathf.Max(1, enemy.maxHP + hpDelta), false); - if (hpDelta > 0) enemy.currentHP = Mathf.Clamp(enemy.currentHP + hpDelta, 0, enemy.maxHP); + if (hpDelta > 0) enemy.ModifyHP(hpDelta); } int newHP = ally != null ? ally.maxHP : enemy.maxHP; CheckLimitAndWarnInt(targetName, "最大生命值", oldHP, newHP, hpDelta); @@ -1595,7 +1589,7 @@ ResolvedGroup: { int d = Mathf.CeilToInt(amountTotal); enemy.SetMaxHP(enemy.maxHP + d, false); - if (d > 0) enemy.currentHP = Mathf.Clamp(enemy.currentHP + d, 0, enemy.maxHP); + if (d > 0) enemy.ModifyHP(d); iBudeffPrefabController.Instance?.RegisterEnemyTimedEffect(enemy, PlayerBudeffIconType.ot_maxHP_up, d, 0f); } break; diff --git a/Assets/scripts/gamePlay_gameplay/HoldNote.cs b/Assets/scripts/gamePlay_gameplay/HoldNote.cs index 529f93cf..c3aa0fa6 100644 --- a/Assets/scripts/gamePlay_gameplay/HoldNote.cs +++ b/Assets/scripts/gamePlay_gameplay/HoldNote.cs @@ -60,6 +60,11 @@ public class HoldNote : BaseNote [Range(1f, 2f)] public float holdWindowMultiplier = 1.3f; + [Header("Custom Animation")] + public GameObject holdAnimationPrefab; + private GameObject activeHoldAnimationInstance; + private Coroutine delayedHoldAnimationCoroutine; + public float visualSpeedMultiplier = 1f; // injected from NoteSpawner to adapt windows when visual speed changes // track when the hold actually started (real-time) so we can compute held fraction @@ -317,6 +322,58 @@ public class HoldNote : BaseNote } } + private void StartHoldEffects() + { + StopHoldEffects(); // cleanup any existing + if (gameObject.activeInHierarchy) + { + delayedHoldAnimationCoroutine = StartCoroutine(DelayedStartHoldEffects()); + } + } + + private void StopHoldEffects() + { + if (delayedHoldAnimationCoroutine != null) + { + StopCoroutine(delayedHoldAnimationCoroutine); + delayedHoldAnimationCoroutine = null; + } + if (activeHoldAnimationInstance != null) + { + Destroy(activeHoldAnimationInstance); + activeHoldAnimationInstance = null; + } + AnimationController.Global?.StopHoldParticles(); + } + + private IEnumerator DelayedStartHoldEffects() + { + yield return new WaitForSeconds(0.1f); + + // Start standard particles + AnimationController.Global?.StartHoldParticles(noteColor); + + // Instantiate custom prefab if assigned + if (holdAnimationPrefab != null) + { + // find spawn position: prefer the track effect position if available from AnimationController + Vector3 spawnPos = transform.position; + var ac = AnimationController.Global; + if (ac != null) + { + // Logic to find slot position (simplified: use ac's position or the note's) + // In AnimationController.PlayDestroyAnimation, it uses redEffect.transform.position etc. + // We don't have direct access to those private fields, but we can assume + // the note is at the judge line when this starts. + } + + activeHoldAnimationInstance = Instantiate(holdAnimationPrefab, spawnPos, Quaternion.identity); + + // Optionally parent to the note or track + // activeHoldAnimationInstance.transform.SetParent(this.transform, false); + } + } + private IEnumerator DelayedDisableAnimation(GameObject animationObject, float delay) { // No-op: we used to disable the shared AnimationController here which stopped coroutines. @@ -440,7 +497,7 @@ public class HoldNote : BaseNote if (!isHoldActive && jm != null && jm.IsStartJudged(noteID) && !jm.HasNoteReleased(noteID) && keyHeld) { isHoldActive = true; - AnimationController.Global?.StartHoldParticles(noteColor); + StartHoldEffects(); if (debugEnabled) Debug.Log($"[HoldNote] Start particles started for {noteID} color={noteColor} at time={now:F3}"); } @@ -474,7 +531,7 @@ public class HoldNote : BaseNote if (isHoldActive && keyUp) { isHoldActive = false; - AnimationController.Global?.StopHoldParticles(); + StopHoldEffects(); if (debugEnabled) Debug.Log($"[HoldNote] KeyUp {keyToPress} detected. NoteID: {noteID}, Segment: {segment}, Type: {type}"); if (!hasReleased) @@ -649,7 +706,7 @@ public class HoldNote : BaseNote JudgeManager.Instance.RegisterStartJudged(noteID, true); isHoldActive = true; PlayHitAnimation(); - AnimationController.Global?.StartHoldParticles(noteColor); + StartHoldEffects(); holdStartTime = pressTime; HoldNoteJudgePool.RegisterStart(noteID, pressTime, hitTime, scheduledEndTime, noteColor, trackIndex, (object)noteData); @@ -695,17 +752,17 @@ public class HoldNote : BaseNote // Autoplay must ignore physical input to guarantee Perfect at scheduledEndTime. if (!GameConfig.autoPlayEnabled && Input.GetKey(keyToPress) && JudgeManager.Instance.IsStartJudged(noteID) && !isJudged) { - if (JudgeManager.IsDebugEnabled) Debug.Log($"[HoldNote] End entered while key still held: {noteColor}, calculating result immediately"); + if (JudgeManager.IsDebugEnabled) Debug.Log($"[HoldNote] End entered while key still held: {noteColor}, forcing Perfect"); // Record release time as current time (player is still holding) releaseTime = Time.time; hasReleased = true; JudgeManager.Instance?.RegisterNoteReleased(noteID, true); - // Evaluate and judge the hold end - EvaluateHoldEnd(releaseTime, false); + // Evaluate and judge the hold end - force Perfect since we reached the end while holding + EvaluateHoldEnd(releaseTime, false, true); isJudged = true; // Terminate input - mark key as released isHoldActive = false; - AnimationController.Global?.StopHoldParticles(); + StopHoldEffects(); return; } @@ -875,7 +932,7 @@ public class HoldNote : BaseNote JudgeManager.Instance.RegisterStartJudged(noteID, true); isHoldActive = true; PlayHitAnimation(); - AnimationController.Global?.StartHoldParticles(noteColor); + StartHoldEffects(); // record when the hold started so we can compute held fraction later holdStartTime = pressTime; @@ -891,7 +948,7 @@ public class HoldNote : BaseNote JudgeManager.Instance.RegisterStartJudged(noteID, true); isHoldActive = true; PlayHitAnimation(); - AnimationController.Global?.StartHoldParticles(noteColor); + StartHoldEffects(); holdStartTime = pressTime; @@ -905,7 +962,7 @@ public class HoldNote : BaseNote JudgeManager.Instance.RegisterStartJudged(noteID, true); isHoldActive = true; PlayHitAnimation(); - AnimationController.Global?.StartHoldParticles(noteColor); + StartHoldEffects(); holdStartTime = pressTime; @@ -986,7 +1043,7 @@ public class HoldNote : BaseNote } // central evaluation for hold end, given an actual releaseTime (real-time) or forceMiss - private void EvaluateHoldEnd(float actualReleaseTime, bool forceMiss) + private void EvaluateHoldEnd(float actualReleaseTime, bool forceMiss, bool forcePerfect = false) { if (isJudged) return; // already evaluated @@ -1001,7 +1058,7 @@ public class HoldNote : BaseNote hasReleased = true; JudgeManager.Instance.RegisterNoteReleased(noteID, true); - if (JudgeManager.IsDebugEnabled) Debug.Log($"[HoldNote] EvaluateHoldEnd: noteID={noteID} releaseTime={releaseTime:F3} scheduledEnd={scheduledEndTime:F3} forceMiss={forceMiss}"); + if (JudgeManager.IsDebugEnabled) Debug.Log($"[HoldNote] EvaluateHoldEnd: noteID={noteID} releaseTime={releaseTime:F3} scheduledEnd={scheduledEndTime:F3} forceMiss={forceMiss} forcePerfect={forcePerfect}"); string result; @@ -1028,13 +1085,13 @@ public class HoldNote : BaseNote float playerHeld = Mathf.Clamp(releaseTime - info.pressTime, 0f, info.length); float frac = info.length <= 0f ? 0f : (playerHeld / info.length); - if (frac > 0.8f) + if (forcePerfect || frac > 0.7f) { result = "Perfect"; ScoreManager.Instance.countPerfect += 1; if (trackIndex >= 0 && trackIndex < 5) ScoreManager.Instance.trackPerfectCounts[trackIndex]++; } - else if (frac > 0.5f) + else if (frac > 0.4f) { result = "Great"; ScoreManager.Instance.countGreat += 1; @@ -1069,13 +1126,13 @@ public class HoldNote : BaseNote float held = Mathf.Clamp(actualReleaseTime - hitTime, 0f, holdRequired); float frac = holdRequired <= 0f ? 0f : (held / holdRequired); - if (frac > 0.8f) + if (forcePerfect || frac > 0.7f) { result = "Perfect"; ScoreManager.Instance.countPerfect += 1; if (trackIndex >= 0 && trackIndex < 5) ScoreManager.Instance.trackPerfectCounts[trackIndex]++; } - else if (frac > 0.5f) + else if (frac > 0.4f) { result = "Great"; ScoreManager.Instance.countGreat += 1; @@ -1193,7 +1250,7 @@ public class HoldNote : BaseNote if (JudgeManager.IsDebugEnabled) Debug.Log($"[HoldNote] Hold end NotifyNoteHit called: TrackIndex={TrackIndex} trackIndexField={trackIndex} result={result} triggeredHold={triggeredHold} triggeredTap={triggeredTap}"); } - AnimationController.Global?.StopHoldParticles(); + StopHoldEffects(); // Release the track lock immediately after end evaluation so the next hold can start on time ReleaseTrackJudgeLockSafe(); @@ -1315,6 +1372,9 @@ public class HoldNote : BaseNote // Restore materials before returning to pool/reusing RestoreOriginalMaterials(); + // Stop any active hold animations or delayed starts + StopHoldEffects(); + hasReleased = false; segment = NoteSegment.None; keyToPress = KeyCode.None; diff --git a/Assets/scripts/gamePlay_gameplay/Judge/NoteJudgeConfig.asset b/Assets/scripts/gamePlay_gameplay/Judge/NoteJudgeConfig.asset index b8c4d56b..ed565c85 100644 --- a/Assets/scripts/gamePlay_gameplay/Judge/NoteJudgeConfig.asset +++ b/Assets/scripts/gamePlay_gameplay/Judge/NoteJudgeConfig.asset @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 088ed1ed6b6731f43ad3166781e3e931, type: 3} m_Name: NoteJudgeConfig m_EditorClassIdentifier: - perfectRange: 0.15 - greatRange: 0.2 - goodRange: 0.25 - missRange: 0.3 + perfectRange: 0.05 + greatRange: 0.1 + goodRange: 0.15 + missRange: 0.2 diff --git a/Assets/scripts/gamePlay_gameplay/Note.cs b/Assets/scripts/gamePlay_gameplay/Note.cs index c4c2c8ca..cca568dc 100644 --- a/Assets/scripts/gamePlay_gameplay/Note.cs +++ b/Assets/scripts/gamePlay_gameplay/Note.cs @@ -55,6 +55,9 @@ public class Note : BaseNote private static int ComputePmDeltaFromJudge(string judgeResult, AllyCombatant ally) { + // If current character slot has no ally or is dead, then this corresponding track will also not get idol score + if (ally == null || ally.IsDead) return 0; + int baseScore = 0; var bmm = ally != null ? ally.bmm : null; diff --git a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs index 231e0e4f..7f7b9f5b 100644 --- a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs +++ b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs @@ -27,6 +27,12 @@ public class NoteSpawner : MonoBehaviour [Tooltip("Global additional realtime offset (seconds) added to hit times for all notes. Use to test input latency or adjust judgement timing. Default 0. Can be negative to make notes arrive earlier.")] public float globalHitDelay = 0f; + [Header("Sync Note Detection")] + [Tooltip("Whether to spawn a special prefab for notes that appear within 0.05s of each other.")] + public bool enableSyncNotePrefab = false; + [Tooltip("The prefab to instantiate under the note when a sync is detected.")] + public GameObject syncNotePrefab; + // Documentation text normalized. [Tooltip("Multiplier applied to visual fall speed. Changing this will automatically adjust spawn timing so notes still arrive at their original beat times.")] [Range(0.5f, 2f)] @@ -131,6 +137,10 @@ public class NoteSpawner : MonoBehaviour spawnOffset = savedDelay + static_value_add_to_spawnoffset; if (JudgeManager.IsDebugEnabled) Debug.Log($"[NoteSpawner] Applied spawnOffset={spawnOffset} (Saved={savedDelay} + Static={static_value_add_to_spawnoffset})"); + // 读取 PlayerPrefs 中的同步音符开关状态 + enableSyncNotePrefab = PlayerPrefs.GetInt("EnableSyncNotePrefab", 1) == 1; + if (JudgeManager.IsDebugEnabled) Debug.Log($"[NoteSpawner] Applied enableSyncNotePrefab={enableSyncNotePrefab}"); + // restore animations active state on Start if (animations != null) { @@ -254,6 +264,27 @@ public class NoteSpawner : MonoBehaviour NoteData note = beatmap.notes[i]; + // Check if this is a sync note (within 0.05s of any other note) + bool isSync = false; + if (enableSyncNotePrefab) + { + // Check previous notes (optimized assuming sorted beatmap) + for (int j = i - 1; j >= 0; j--) + { + if (Mathf.Abs(note.time - beatmap.notes[j].time) <= 0.05f) { isSync = true; break; } + if (note.time - beatmap.notes[j].time > 0.05f) break; + } + if (!isSync) + { + // Check next notes (optimized assuming sorted beatmap) + for (int j = i + 1; j < beatmap.notes.Length; j++) + { + if (Mathf.Abs(note.time - beatmap.notes[j].time) <= 0.05f) { isSync = true; break; } + if (beatmap.notes[j].time - note.time > 0.05f) break; + } + } + } + float travelTime = GetLaneTravelTimeSeconds(laneTravelTimes, note.trackIndex); float spawnTime = note.time - travelTime; float delay = spawnTime - (Time.time - startTime) + spawnOffset; @@ -272,12 +303,12 @@ public class NoteSpawner : MonoBehaviour if (note.type == "hold") { // create the hold note once and record its id mapping - int hid = SpawnHoldNote(note, sm, travelTime, noteSpeed, segmentInterval); + int hid = SpawnHoldNote(note, sm, travelTime, noteSpeed, segmentInterval, isSync); noteIndexToHoldId[i] = hid; } else { - SpawnNote(note, sm, travelTime, noteSpeed); + SpawnNote(note, sm, travelTime, noteSpeed, isSync); } } @@ -299,7 +330,7 @@ public class NoteSpawner : MonoBehaviour return key; } - public void SpawnNote(NoteData noteData, float sm, float travelTime, float noteSpeed) + public void SpawnNote(NoteData noteData, float sm, float travelTime, float noteSpeed, bool isSync = false) { if (noteData.trackIndex < 0 || noteData.trackIndex >= spawnPoints.Length) { @@ -321,6 +352,23 @@ public class NoteSpawner : MonoBehaviour return; } + if (enableSyncNotePrefab && syncNotePrefab != null) + { + // Clean up any existing sync prefab from previous use in pool + foreach (Transform child in note.transform) + { + if (child.name.StartsWith(syncNotePrefab.name)) + { + Destroy(child.gameObject); + } + } + + if (isSync) + { + Instantiate(syncNotePrefab, note.transform); + } + } + Transform spawnPoint = spawnPoints[noteData.trackIndex]; // Calculate hit time (realtime when note should be judged) @@ -354,7 +402,7 @@ public class NoteSpawner : MonoBehaviour } // Modified: return generated holdNoteId so callers can map notes to ids - public int SpawnHoldNote(NoteData noteData, float sm, float travelTime, float noteSpeed, float segmentInterval) + public int SpawnHoldNote(NoteData noteData, float sm, float travelTime, float noteSpeed, float segmentInterval, bool isSync = false) { if (noteData.trackIndex < 0 || noteData.trackIndex >= spawnPoints.Length) { @@ -398,6 +446,23 @@ public class NoteSpawner : MonoBehaviour return -1; } + if (enableSyncNotePrefab && syncNotePrefab != null) + { + // Clean up any existing sync prefab from previous use in pool + foreach (Transform child in startObj.transform) + { + if (child.name.StartsWith(syncNotePrefab.name)) + { + Destroy(child.gameObject); + } + } + + if (isSync) + { + Instantiate(syncNotePrefab, startObj.transform); + } + } + // Hold segments use absolute positioning; spawn at the lane origin. startObj.transform.position = spawnPoint.position; startObj.transform.rotation = Quaternion.identity; diff --git a/Assets/scripts/gamePlay_gameplay/settlementController.cs b/Assets/scripts/gamePlay_gameplay/settlementController.cs index da66448c..efa2e85f 100644 --- a/Assets/scripts/gamePlay_gameplay/settlementController.cs +++ b/Assets/scripts/gamePlay_gameplay/settlementController.cs @@ -1228,11 +1228,11 @@ public class settlementController : MonoBehaviour if (sm != null) { - scores[0] = sm.red_pmScore_sum; - scores[1] = sm.green_pmScore_sum; - scores[2] = sm.yellow_pmScore_sum; - scores[3] = sm.purple_pmScore_sum; - scores[4] = sm.blue_pmScore_sum; + scores[0] = sm.red_idolScore_sum; + scores[1] = sm.green_idolScore_sum; + scores[2] = sm.yellow_idolScore_sum; + scores[3] = sm.purple_idolScore_sum; + scores[4] = sm.blue_idolScore_sum; } else { @@ -1262,9 +1262,13 @@ public class settlementController : MonoBehaviour if (topIndex < 0 || max <= 0) { Debug.Log("[SettlementController] No top scorer found or scores are all zero"); - // hide image - mvp_hero_hd_image.sprite = null; - mvp_hero_hd_image.color = new Color(mvp_hero_hd_image.color.r, mvp_hero_hd_image.color.g, mvp_hero_hd_image.color.b, 0f); + // hide image and mvp object + if (mvp_object != null) mvp_object.SetActive(false); + if (mvp_hero_hd_image != null) + { + mvp_hero_hd_image.sprite = null; + mvp_hero_hd_image.color = new Color(mvp_hero_hd_image.color.r, mvp_hero_hd_image.color.g, mvp_hero_hd_image.color.b, 0f); + } return; } @@ -1297,6 +1301,8 @@ public class settlementController : MonoBehaviour } // final fallback: try direct Resources lookup by scanning all and picking first non-null for slot + // REMOVED: This fallback causes a default character to appear when no hero is selected. + /* if (heroSO == null) { if (_cachedAllyHeroSOs == null || _cachedAllyHeroSOs.Length == 0) @@ -1309,6 +1315,7 @@ public class settlementController : MonoBehaviour heroSO = _cachedAllyHeroSOs[0] as AllyHero_SO; } } + */ if (heroSO != null) { diff --git a/Assets/scripts/gameplay_teamUI/teamUIController.cs b/Assets/scripts/gameplay_teamUI/teamUIController.cs index ee7544ba..3f5977a8 100644 --- a/Assets/scripts/gameplay_teamUI/teamUIController.cs +++ b/Assets/scripts/gameplay_teamUI/teamUIController.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using Spine; using Spine.Unity; using SmoothShakeFree; diff --git a/Assets/scripts/settings/gameSettings.cs b/Assets/scripts/settings/gameSettings.cs new file mode 100644 index 00000000..b0bd7b97 --- /dev/null +++ b/Assets/scripts/settings/gameSettings.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEngine.UI; +using TMPro; + +public class gameSettings : MonoBehaviour +{ + public Toggle multiNoteNoticeToggle; + public Text multiNoteNoticeText; // Using Legacy Text object + + private const string PrefKey_EnableSyncNotePrefab = "EnableSyncNotePrefab"; + + void Start() + { + if (multiNoteNoticeToggle != null) + { + // Initialize toggle state from PlayerPrefs, default to 1 (true) + bool isEnabled = PlayerPrefs.GetInt(PrefKey_EnableSyncNotePrefab, 1) == 1; + multiNoteNoticeToggle.isOn = isEnabled; + + // Initialize text based on current toggle value + UpdateText(isEnabled); + + // Add listener to save value and update text when changed + multiNoteNoticeToggle.onValueChanged.AddListener((isOn) => + { + PlayerPrefs.SetInt(PrefKey_EnableSyncNotePrefab, isOn ? 1 : 0); + PlayerPrefs.Save(); + UpdateText(isOn); + }); + } + } + + private void UpdateText(bool isOn) + { + if (multiNoteNoticeText != null) + { + multiNoteNoticeText.text = isOn ? "已启用多押指示器" : "已禁用多押指示器"; + } + + // Also update the Toggle's own label text if it exists (usually a child object) + Text toggleLabel = multiNoteNoticeToggle.GetComponentInChildren(); + if (toggleLabel != null) + { + toggleLabel.text = isOn ? "启用" : "禁用"; + } + } +} diff --git a/Assets/scripts/settings/gameSettings.cs.meta b/Assets/scripts/settings/gameSettings.cs.meta new file mode 100644 index 00000000..5d1226ee --- /dev/null +++ b/Assets/scripts/settings/gameSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 689de294fb913594ab2f3185279f7093 \ No newline at end of file diff --git a/Assets/settingsPrefab/settings.prefab b/Assets/settingsPrefab/settings.prefab index c4b5008c..daddab8c 100644 --- a/Assets/settingsPrefab/settings.prefab +++ b/Assets/settingsPrefab/settings.prefab @@ -1242,6 +1242,85 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &288632413525726058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6462802088136385829} + - component: {fileID: 8279458338363981899} + - component: {fileID: 6655447941607611527} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6462802088136385829 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288632413525726058} + 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: 5884802131779589360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9, y: -0.5} + m_SizeDelta: {x: -28, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8279458338363981899 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288632413525726058} + m_CullTransparentMesh: 1 +--- !u!114 &6655447941607611527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 288632413525726058} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u542F\u7528" --- !u!1 &292890792442898397 GameObject: m_ObjectHideFlags: 0 @@ -2412,6 +2491,188 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &613063072672269059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5577478176999051906} + - component: {fileID: 8238104814443853756} + - component: {fileID: 1997783389099134239} + - component: {fileID: 3627509641723441325} + m_Layer: 0 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5577478176999051906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613063072672269059} + 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: 5353583328112775632} + m_Father: {fileID: 1311140884934416535} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 71.7273, y: 79.501144} + m_SizeDelta: {x: 573.695, y: 46.767} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8238104814443853756 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613063072672269059} + m_CullTransparentMesh: 1 +--- !u!114 &1997783389099134239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613063072672269059} + 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: 7f3b1220317607e44bbb8f0e1998044a, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3627509641723441325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 613063072672269059} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &654405881476071668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8499924197187058749} + - component: {fileID: 8789687179809659712} + - component: {fileID: 5481575956702793953} + m_Layer: 0 + m_Name: multiNoteNoticeTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8499924197187058749 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654405881476071668} + 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: 3457684080048414872} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 121.39, y: -21} + m_SizeDelta: {x: 242.78, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8789687179809659712 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654405881476071668} + m_CullTransparentMesh: 1 +--- !u!114 &5481575956702793953 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 654405881476071668} + 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: 0.7264151, g: 0.7264151, b: 0.7264151, 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u8FDE\u643A\u97F3\u7B26\u63D0\u793A" --- !u!1 &662827689373606894 GameObject: m_ObjectHideFlags: 0 @@ -5154,6 +5415,85 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: " \u663E \u793A \u6A21 \u5F0F" +--- !u!1 &1573077177148512643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 460344311787623741} + - component: {fileID: 6527738140150583184} + - component: {fileID: 6578273756999360393} + m_Layer: 0 + m_Name: notice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &460344311787623741 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1573077177148512643} + 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: 4333249785498233804} + 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: 1.2105, y: 93.3} + m_SizeDelta: {x: 340.9301, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6527738140150583184 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1573077177148512643} + m_CullTransparentMesh: 1 +--- !u!114 &6578273756999360393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1573077177148512643} + 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: 0.7254902, g: 0.7254902, b: 0.7254902, 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u5C06\u5728\u591A\u62BC\u97F3\u7B26\u4E0A\u663E\u793A\u767D\u8272\u9AD8\u4EAE\u63D0\u793A\u6761\uFF0C\u4EC5\u5F71\u54CD\u89C6\u89C9\u6548\u679C" --- !u!1 &1574044722487172302 GameObject: m_ObjectHideFlags: 0 @@ -6362,6 +6702,85 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1924799290982732616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6664821191611988830} + - component: {fileID: 5264652875051364063} + - component: {fileID: 3378640346121950263} + m_Layer: 0 + m_Name: errorText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6664821191611988830 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924799290982732616} + 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: 4333249785498233804} + 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: 290, y: 119.9} + m_SizeDelta: {x: 381.433, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5264652875051364063 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924799290982732616} + m_CullTransparentMesh: 1 +--- !u!114 &3378640346121950263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924799290982732616} + 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: 0.504717, b: 0.504717, 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 8 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 8 + m_MaxSize: 14 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u8B66\u544A\u4FE1\u606F" --- !u!1 &1995924314063099947 GameObject: m_ObjectHideFlags: 0 @@ -6441,6 +6860,85 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: "\u6E38\u620F\u5185\u97F3\u4E50\u97F3\u91CF" +--- !u!1 &2027718235504404514 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3809356143097873368} + - component: {fileID: 4024546406796747267} + - component: {fileID: 1683504594347524210} + m_Layer: 0 + m_Name: title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &3809356143097873368 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027718235504404514} + 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: 3457684080048414872} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 119.663, y: 9} + m_SizeDelta: {x: 103.882, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4024546406796747267 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027718235504404514} + m_CullTransparentMesh: 1 +--- !u!114 &1683504594347524210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027718235504404514} + 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: 0.5, g: 0.5, b: 0.5, 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: " \u663E \u793A \u6A21 \u5F0F" --- !u!1 &2037928928142104469 GameObject: m_ObjectHideFlags: 0 @@ -8761,6 +9259,42 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &2670799904022975498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1311140884934416535} + m_Layer: 0 + m_Name: multiNoteNotice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1311140884934416535 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2670799904022975498} + 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: 5577478176999051906} + m_Father: {fileID: 4401682417640619457} + 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.5, y: 0.5} --- !u!1 &2780113535292134211 GameObject: m_ObjectHideFlags: 0 @@ -9146,6 +9680,83 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: + +--- !u!1 &2877052300193024126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1545624780902551861} + - component: {fileID: 6386763531776626373} + - component: {fileID: 8918366405498385866} + m_Layer: 0 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1545624780902551861 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2877052300193024126} + 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: 6175313394032594377} + - {fileID: 4401682417640619457} + m_Father: {fileID: 1526989865090828760} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 74.82461, y: -11.416} + m_SizeDelta: {x: 579.891, y: 201.639} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6386763531776626373 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2877052300193024126} + m_CullTransparentMesh: 1 +--- !u!114 &8918366405498385866 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2877052300193024126} + 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} + 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: 10907, 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!1 &2912327603801203053 GameObject: m_ObjectHideFlags: 0 @@ -10185,6 +10796,42 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &3211684139546968030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1388702705639975626} + m_Layer: 0 + m_Name: multiNoteNotice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1388702705639975626 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3211684139546968030} + 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: 4333249785498233804} + m_Father: {fileID: 3457684080048414872} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 119.663, y: -136.892} + m_SizeDelta: {x: 160, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &3223385375736645975 GameObject: m_ObjectHideFlags: 0 @@ -12205,6 +12852,67 @@ RectTransform: m_AnchoredPosition: {x: 50, y: -110.744995} m_SizeDelta: {x: 100, y: 66.03} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3943572947742225493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4401682417640619457} + - component: {fileID: 1173018626027002168} + m_Layer: 0 + m_Name: fathers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4401682417640619457 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3943572947742225493} + 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: 1311140884934416535} + m_Father: {fileID: 1545624780902551861} + 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: -74.82461, y: 7.0429993} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1173018626027002168 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3943572947742225493} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 3 + m_Bottom: 0 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 1 + m_CellSize: {x: 100, y: 53.81} + m_Spacing: {x: 310.7, y: 48.3} + m_Constraint: 1 + m_ConstraintCount: 1 --- !u!1 &3977517591882006003 GameObject: m_ObjectHideFlags: 0 @@ -13849,6 +14557,7 @@ RectTransform: - {fileID: 8796310631621918227} - {fileID: 1114109070869464219} - {fileID: 5797815244864795742} + - {fileID: 1526989865090828760} - {fileID: 7030764837440913266} - {fileID: 803366926255794456} m_Father: {fileID: 4103495235733383309} @@ -13885,10 +14594,10 @@ MonoBehaviour: controlSettingsGameObject: {fileID: 8646831468741756782} controlSettings_selectedMark: {fileID: 2917375910585705402} gameSettingsButton: {fileID: 564569818979964898} - gameSettingsGameObject: {fileID: 0} + gameSettingsGameObject: {fileID: 6207851321062005932} gameSettings_selectedMark: {fileID: 7288971812519676948} aboutUsButton: {fileID: 2409978658883514639} - aboutUsGameObject: {fileID: 0} + aboutUsGameObject: {fileID: 8766568425986160009} aboutUs_selectedMark: {fileID: 1585960833723389929} deviceInfoButton: {fileID: 307779529255437222} deviceInfoGameObject: {fileID: 6951746934923608577} @@ -14840,6 +15549,85 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: '-' +--- !u!1 &4780242946489874955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6175313394032594377} + - component: {fileID: 4037892880890529542} + - component: {fileID: 4289628725832693797} + m_Layer: 0 + m_Name: title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6175313394032594377 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4780242946489874955} + 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: 1545624780902551861} + 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: -242.45604, y: 177.83644} + m_SizeDelta: {x: 178.706, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4037892880890529542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4780242946489874955} + m_CullTransparentMesh: 1 +--- !u!114 &4289628725832693797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4780242946489874955} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.62352943} + 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: 12800000, guid: cc180dff846d13a4d88ddaed6f77e5cd, type: 3} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u6539\u53D8\u6E38\u620F\u8BBE\u7F6E" --- !u!1 &4788413118584540888 GameObject: m_ObjectHideFlags: 0 @@ -15776,6 +16564,71 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5049568188653609344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3457684080048414872} + - component: {fileID: 3700764488114152955} + m_Layer: 0 + m_Name: multiNoteNoticeFather + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3457684080048414872 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5049568188653609344} + 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: 8499924197187058749} + - {fileID: 3809356143097873368} + - {fileID: 1388702705639975626} + m_Father: {fileID: 5353583328112775632} + 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: 239.326, y: 202.884} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3700764488114152955 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5049568188653609344} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: -1 + m_Bottom: 4 + m_ChildAlignment: 1 + m_Spacing: 45.9 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &5112221421218520578 GameObject: m_ObjectHideFlags: 0 @@ -17840,6 +18693,92 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5803306772577602855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5884802131779589360} + - component: {fileID: 421962405381999483} + m_Layer: 0 + m_Name: Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5884802131779589360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5803306772577602855} + 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: 4850881817488529037} + - {fileID: 6462802088136385829} + m_Father: {fileID: 4333249785498233804} + 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: 343.1, y: 94.9} + m_SizeDelta: {x: 160, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &421962405381999483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5803306772577602855} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 102240363627626447} + toggleTransition: 1 + graphic: {fileID: 763824572294056849} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 --- !u!1 &5818797171294781974 GameObject: m_ObjectHideFlags: 0 @@ -19561,6 +20500,57 @@ MonoBehaviour: m_Spacing: {x: 310.7, y: 66.42} m_Constraint: 1 m_ConstraintCount: 2 +--- !u!1 &6207851321062005932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1526989865090828760} + - component: {fileID: 5787342245032429137} + m_Layer: 0 + m_Name: gamesettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1526989865090828760 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6207851321062005932} + 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: 1545624780902551861} + m_Father: {fileID: 3052461523855461456} + 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: 61.82} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5787342245032429137 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6207851321062005932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 689de294fb913594ab2f3185279f7093, type: 3} + m_Name: + m_EditorClassIdentifier: + multiNoteNoticeToggle: {fileID: 421962405381999483} + multiNoteNoticeText: {fileID: 3378640346121950263} --- !u!1 &6229218117972237315 GameObject: m_ObjectHideFlags: 0 @@ -21593,6 +22583,81 @@ MonoBehaviour: m_ChildScaleWidth: 0 m_ChildScaleHeight: 0 m_ReverseArrangement: 0 +--- !u!1 &6913037194062869871 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2865760682806230104} + - component: {fileID: 722829694478829732} + - component: {fileID: 763824572294056849} + m_Layer: 0 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2865760682806230104 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6913037194062869871} + 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: 4850881817488529037} + 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: 12, y: 12} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &722829694478829732 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6913037194062869871} + m_CullTransparentMesh: 1 +--- !u!114 &763824572294056849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6913037194062869871} + 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: 61f227ba121c97e468f810778f33b8cc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!1 &6933908157218776816 GameObject: m_ObjectHideFlags: 0 @@ -24540,6 +25605,69 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!1 &7620082665774126610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5353583328112775632} + - component: {fileID: 3887289190612912326} + m_Layer: 0 + m_Name: multiNoteNoticeSettings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5353583328112775632 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7620082665774126610} + 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: 3457684080048414872} + m_Father: {fileID: 5577478176999051906} + 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: 287.062, y: 577.007} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3887289190612912326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7620082665774126610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 22 + m_Bottom: -42 + m_ChildAlignment: 1 + m_Spacing: -334.1 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &7620159172680567933 GameObject: m_ObjectHideFlags: 0 @@ -26398,6 +27526,44 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] +--- !u!1 &8172332855965739411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4333249785498233804} + m_Layer: 0 + m_Name: target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4333249785498233804 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8172332855965739411} + 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: 460344311787623741} + - {fileID: 6664821191611988830} + - {fileID: 5884802131779589360} + m_Father: {fileID: 1388702705639975626} + 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: 51.441917, y: 0} + m_SizeDelta: {x: 202.884, y: 100} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &8211179270575209690 GameObject: m_ObjectHideFlags: 0 @@ -28418,6 +29584,82 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8709232600552799127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4850881817488529037} + - component: {fileID: 5316427981188340344} + - component: {fileID: 102240363627626447} + m_Layer: 0 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4850881817488529037 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709232600552799127} + 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: 2865760682806230104} + m_Father: {fileID: 5884802131779589360} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 10, y: -10} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5316427981188340344 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709232600552799127} + m_CullTransparentMesh: 1 +--- !u!114 &102240363627626447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8709232600552799127} + 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: 10913, guid: 0000000000000000f000000000000000, type: 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 &8709915051047015715 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/songsDatabase/SongDataController/dlcButton.prefab b/Assets/songsDatabase/SongDataController/dlcButton.prefab index 7d735f5f..9a33fe8a 100644 --- a/Assets/songsDatabase/SongDataController/dlcButton.prefab +++ b/Assets/songsDatabase/SongDataController/dlcButton.prefab @@ -158,6 +158,241 @@ MonoBehaviour: m_VerticalOverflow: 0 m_LineSpacing: 1 m_Text: "\u53D1\u884C\u65E5\u671F\uFF1A2026-66-66" +--- !u!1 &1468656698895808366 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5888644841479767732} + - component: {fileID: 2960304788727126542} + - component: {fileID: 5368810222697972913} + m_Layer: 5 + m_Name: detail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5888644841479767732 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468656698895808366} + 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: 1253227257531515220} + 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: 323.3198, y: 55.2261} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2960304788727126542 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468656698895808366} + m_CullTransparentMesh: 1 +--- !u!114 &5368810222697972913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468656698895808366} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 12800000, guid: bd4be44636ad6c24a9b117a7108a75e9, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u6682\u672A\u627E\u5230\u7B80\u4ECB\u4FE1\u606F\u3002" +--- !u!1 &2192019250287701500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1253227257531515220} + - component: {fileID: 5100036912783500580} + - component: {fileID: 4385572967205360590} + m_Layer: 5 + m_Name: detail + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1253227257531515220 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2192019250287701500} + 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: 1099650434260541262} + - {fileID: 5888644841479767732} + m_Father: {fileID: 5010078828579475845} + 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: 73.32225} + m_SizeDelta: {x: 355.2, y: 36.8645} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5100036912783500580 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2192019250287701500} + m_CullTransparentMesh: 1 +--- !u!114 &4385572967205360590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2192019250287701500} + 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: 7f3b1220317607e44bbb8f0e1998044a, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 2 +--- !u!1 &2238554210802163870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1099650434260541262} + - component: {fileID: 9202529557900048664} + - component: {fileID: 3423794397929174540} + m_Layer: 5 + m_Name: title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1099650434260541262 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238554210802163870} + 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: 1253227257531515220} + 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: -82.58, y: 22.1} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9202529557900048664 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238554210802163870} + m_CullTransparentMesh: 1 +--- !u!114 &3423794397929174540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2238554210802163870} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 12800000, guid: dfa10de3e2846524089b5073175cd151, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u5173\u4E8E\u6B64DLC\u7684\u7B80\u4ECB\uFF1A" --- !u!1 &2704985786795051223 GameObject: m_ObjectHideFlags: 0 @@ -272,6 +507,8 @@ RectTransform: - {fileID: 333634122881333044} - {fileID: 3306384613169609027} - {fileID: 4819405071236471537} + - {fileID: 2939871135262439914} + - {fileID: 1253227257531515220} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} @@ -378,8 +615,10 @@ MonoBehaviour: dlcID: {fileID: 115205934777297662} dlcProducer: {fileID: 2931296379136689410} dlcPubliushDate: {fileID: 3713972282091736206} + dlcSongsAmount: {fileID: 6445397485245527728} dlc_nowSelectedImageBoarder: {fileID: 2824183749825073581} - dlcDescription: {fileID: 0} + dlcDetailParent: {fileID: 2192019250287701500} + dlcDescription: {fileID: 5368810222697972913} dlcDataSO: {fileID: 0} dlcContent: - {fileID: 0} @@ -397,6 +636,85 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 76ce63b908338a84c8a3aa071b90c46b, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &5437805816395700444 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2939871135262439914} + - component: {fileID: 5911944271956214811} + - component: {fileID: 6445397485245527728} + m_Layer: 5 + m_Name: songAmount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2939871135262439914 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5437805816395700444} + 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: 5010078828579475845} + 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: 156.45, y: 33.1} + m_SizeDelta: {x: 36.6942, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5911944271956214811 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5437805816395700444} + m_CullTransparentMesh: 1 +--- !u!114 &6445397485245527728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5437805816395700444} + 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: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 12800000, guid: c1479b56d8329614e94637b5c5bafc87, type: 3} + m_FontSize: 18 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 5 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 202 --- !u!1 &6759998237426852132 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/songsDatabase/dlcData/dlcButton.cs b/Assets/songsDatabase/dlcData/dlcButton.cs index 64a9c3d3..8c5ea34d 100644 --- a/Assets/songsDatabase/dlcData/dlcButton.cs +++ b/Assets/songsDatabase/dlcData/dlcButton.cs @@ -1,10 +1,11 @@ -using UnityEngine; +using UnityEngine; using UnityEngine.UI; +using UnityEngine.EventSystems; using System.Collections.Generic; using System.Collections; using System.IO; -public class dlcButton : MonoBehaviour +public class dlcButton : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { [Header("Inspector")] public Image dlc_profileImgae; @@ -12,8 +13,10 @@ public class dlcButton : MonoBehaviour public Text dlcID; public Text dlcProducer; public Text dlcPubliushDate; + public Text dlcSongsAmount; public Image dlc_nowSelectedImageBoarder; [Header("Inspector")] + public GameObject dlcDetailParent; public Text dlcDescription; [Header("Inspector")] @@ -42,8 +45,57 @@ public class dlcButton : MonoBehaviour private static int selectedIndex = -1; private const string PlayerPrefsKey = "dlc_selected_index"; - // instance index in registration order private int instanceIndex = -1; + private Coroutine hoverCoroutine; + + public void OnPointerEnter(PointerEventData eventData) + { + if (hoverCoroutine != null) StopCoroutine(hoverCoroutine); + hoverCoroutine = StartCoroutine(HandleHover()); + } + + public void OnPointerExit(PointerEventData eventData) + { + if (hoverCoroutine != null) StopCoroutine(hoverCoroutine); + if (dlcDetailParent != null) dlcDetailParent.SetActive(false); + } + + private IEnumerator HandleHover() + { + yield return new WaitForSecondsRealtime(0.5f); + + // 尝试从场景中查找 dlcDetailParent (如果自身引用的为空) + if (dlcDetailParent == null) + { + var details = GameObject.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.None); + foreach (var b in details) + { + if (b != this && b.dlcDetailParent != null) + { + dlcDetailParent = b.dlcDetailParent; + dlcDescription = b.dlcDescription; + break; + } + } + } + + if (dlcDetailParent != null) + { + dlcDetailParent.SetActive(true); + // 更新简介信息 + if (dlcDescription != null) + { + if (dlcDataSO != null) + { + dlcDescription.text = string.IsNullOrEmpty(dlcDataSO.dlcDescription) ? "暂无DLC简介信息。" : dlcDataSO.dlcDescription; + } + else + { + dlcDescription.text = "暂无DLC简介信息。"; + } + } + } + } void Awake() { @@ -374,6 +426,11 @@ public class dlcButton : MonoBehaviour if (s != null) dlcContent.Add(s); } + if (dlcSongsAmount != null) + { + dlcSongsAmount.text = dlcContent.Count.ToString(); + } + if (dlcName != null) dlcName.text = so.dlcName ?? dlcName.text; if (dlcProducer != null) dlcProducer.text = so.dlcProducer ?? dlcProducer.text; if (dlcDescription != null) dlcDescription.text = so.dlcDescription ?? dlcDescription.text; diff --git a/Assets/songsDatabase/selected_songInfo.cs b/Assets/songsDatabase/selected_songInfo.cs index aac479c5..021c1f51 100644 --- a/Assets/songsDatabase/selected_songInfo.cs +++ b/Assets/songsDatabase/selected_songInfo.cs @@ -487,7 +487,16 @@ public class selected_songInfo : MonoBehaviour private void UpdateMusicPlaybackProgress() { - if (preListenAS == null || preListenAS.clip == null || !preListenAS.isPlaying) return; + if (preListenAS == null || preListenAS.clip == null) return; + + // 检查是否自然播放结束 + if (!preListenAS.isPlaying && preListenAS.time >= preListenAS.clip.length * 0.99f) + { + StopPlayback(); + return; + } + + if (!preListenAS.isPlaying) return; // 如果用户没在拖动,则自动更新进度条 if (!Input.GetMouseButton(0)) diff --git a/Assets/steamCheck.cs b/Assets/steamCheck.cs new file mode 100644 index 00000000..48b6241b --- /dev/null +++ b/Assets/steamCheck.cs @@ -0,0 +1,59 @@ +using UnityEngine; +using UnityEngine.UI; +using Steamworks; + +public class steamCheck : MonoBehaviour +{ + [Header("UI")] + public Text welcomeText; + + private const uint APP_ID = 2191270; + + void Awake() + { +#if !UNITY_EDITOR + // ǴSteamSteamԶϷ + if (SteamAPI.RestartAppIfNecessary(new AppId_t(APP_ID))) + { + Application.Quit(); + return; + } +#endif + + // ʼSteam + if (!SteamAPI.Init()) + { + Debug.LogError("SteamAPI ʼʧ"); + Application.Quit(); + return; + } + + SetWelcomeText(); + } + + void SetWelcomeText() + { + if (welcomeText == null) + return; + + if (!SteamUser.BLoggedOn()) + return; + + string playerName = SteamFriends.GetPersonaName(); + CSteamID steamID = SteamUser.GetSteamID(); + + welcomeText.text = $"ӭרԱ1û {playerName} ({steamID.m_SteamID})"; + } + + void Update() + { + if (SteamAPI.IsSteamRunning()) + SteamAPI.RunCallbacks(); + } + + void OnApplicationQuit() + { + if (SteamAPI.IsSteamRunning()) + SteamAPI.Shutdown(); + } +} \ No newline at end of file diff --git a/Assets/steamCheck.cs.meta b/Assets/steamCheck.cs.meta new file mode 100644 index 00000000..3c1f9db0 --- /dev/null +++ b/Assets/steamCheck.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ed7660afeb4cd124f892e60c28d0cb85 \ No newline at end of file diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index a8644845..c17016e6 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -792,7 +792,13 @@ PlayerSettings: XboxOneOverrideIdentityName: XboxOneOverrideIdentityPublisher: vrEditorSettings: {} - cloudServicesEnabled: {} + cloudServicesEnabled: + Build: 0 + Game Performance: 0 + Legacy Analytics: 0 + Purchasing: 0 + UDP: 0 + Unity Ads: 0 luminIcon: m_Name: m_ModelFolderPath: @@ -814,11 +820,11 @@ PlayerSettings: captureStartupLogs: {} activeInputHandler: 2 windowsGamepadBackendHint: 0 - cloudProjectId: + cloudProjectId: f4d8647c-b28f-47c8-a7b8-c44b98409be0 framebufferDepthMemorylessMode: 0 qualitySettingsNames: [] - projectName: - organizationId: + projectName: Bansonic + organizationId: gardeniarabbit cloudEnabled: 0 legacyClampBlendShapeWeights: 0 hmiLoadingImage: {fileID: 0} diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index 404161ff..d678b532 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/ProjectSettings/UnityConnectSettings.asset @@ -10,8 +10,6 @@ UnityConnectSettings: m_EventUrl: https://cdp.cloud.unity3d.com/v1/events m_ConfigUrl: https://config.uca.cloud.unity3d.com m_DashboardUrl: https://dashboard.unity3d.com - m_CNEventUrl: https://cdp.cloud.unity.cn/v1/events - m_CNConfigUrl: https://cdp.cloud.unity.cn/config m_TestInitMode: 0 CrashReportingSettings: m_EventUrl: https://perf-events.cloud.unity.cn @@ -22,7 +20,7 @@ UnityConnectSettings: m_Enabled: 0 m_TestMode: 0 UnityAnalyticsSettings: - m_Enabled: 1 + m_Enabled: 0 m_TestMode: 0 m_InitializeOnStartup: 1 m_PackageRequiringCoreStatsPresent: 0