From 774d3aeb7f2d3c1d51f918d81158e56c59f7fcba Mon Sep 17 00:00:00 2001 From: FloatGaming <3118444022@qq.com> Date: Sat, 2 Aug 2025 00:28:09 +0800 Subject: [PATCH] repaired the motherfucking hold note problem which troubled us longer than 2 months added some UI --- .vsconfig | 6 + .../1002001_emilia/bulele.png.meta | 3 +- .../1002001_emilia/画板 51.png.meta | 3 +- .../1002002_Arcstar/b3.png.meta | 3 +- .../1002002_Arcstar/画板 54.png.meta | 3 +- .../1002003_spectrum/b5 1.png.meta | 3 +- .../1002003_spectrum/画板 100.png.meta | 3 +- .../1002003_spectrum/画板 62.png.meta | 3 +- .../1002003_spectrum/画板 82.png.meta | 3 +- .../1002004_smile/b4 1.png.meta | 3 +- .../1002004_smile/画板 61.png.meta | 3 +- .../1002005_BaboonBabbler/b1 1.png.meta | 3 +- .../1002005_BaboonBabbler/画板 58.png.meta | 3 +- Assets/Scenes/gamePlay_gamePlay.unity | 220 +- Assets/StreamingAssets/KongJiaBin_@16.json | 792 ++++ .../StreamingAssets/KongJiaBin_@16.json.meta | 7 + .../StreamingAssets/exampleSongName_@1.json | 3233 +++++++++++++++++ .../exampleSongName_@1.json.meta | 7 + .../artworks/Songs_Select/level/F@4x.png.meta | 3 +- .../Songs_Select/level/SS@4x.png.meta | 3 +- .../Songs_Select/level/画板 B@4x.png.meta | 3 +- .../Songs_Select/level/画板 C@4x.png.meta | 3 +- .../Songs_Select/level/画板 D@4x.png.meta | 3 +- .../Songs_Select/level/画板 E@4x.png.meta | 3 +- .../Songs_Select/level/画板 EASE@4x.png.meta | 3 +- .../Songs_Select/level/画板 S@4x.png.meta | 3 +- .../Songs_Select/level/画板 UF@4x.png.meta | 3 +- .../Songs_Select/level/画板A@4x.png.meta | 3 +- .../notes/emptyNotes/Green.meta | 8 + .../notes/emptyNotes/Green/画板 48 副本 2.png | Bin 0 -> 1342 bytes .../emptyNotes/Green/画板 48 副本 2.png.meta | 155 + .../notes/emptyNotes/Green/画板 48 副本.png | Bin 0 -> 1263 bytes .../emptyNotes/Green/画板 48 副本.png.meta | 155 + .../notes/emptyNotes/Green/画板 48.png | Bin 0 -> 488 bytes .../notes/emptyNotes/Green/画板 48.png.meta | 155 + .../notes/emptyNotes/note_empty_green.prefab | 7 +- .../notes/note_hold_green.prefab | 7 +- .../notes_Hit/NoteDestroyAnimator.controller | 2 +- .../gamePlay_gamePlay/pause/三角形 1.png.meta | 3 +- .../gamePlay_gamePlay/pause/图层 0.png.meta | 3 +- .../gamePlay_gamePlay/pause/图层 1.png.meta | 3 +- .../pause/画板 85 副本@4x.png.meta | 3 +- .../pause/矩形 23-1.png.meta | 3 +- .../pause/矩形 23-2.png.meta | 3 +- .../pause/矩形 23-3.png.meta | 3 +- .../gamePlay_gamePlay/pause/矩形 23.png.meta | 3 +- .../gamePlay_gamePlay/pause/退出 1.png.meta | 3 +- .../gamePlay_gamePlay/pause/重试.png.meta | 3 +- .../gamePlay_gamePlay/results/SS@4x.png.meta | 3 +- .../results/YAO-4.clip1.png.meta | 3 +- .../gamePlay_gamePlay/results/平静.png.meta | 3 +- .../results/画板 100.png.meta | 3 +- .../results/画板 101.png.meta | 3 +- .../results/画板 102.png.meta | 3 +- .../results/画板 103.png.meta | 3 +- .../results/画板 105.png.meta | 3 +- .../results/画板 106.png.meta | 9 +- .../results/画板 107.png.meta | 3 +- .../results/画板 108.png.meta | 3 +- .../results/画板 110.png.meta | 3 +- .../results/画板 111.png.meta | 3 +- .../results/画板 112.png.meta | 3 +- .../results/画板 113.png.meta | 3 +- .../results/画板 116.png.meta | 3 +- .../results/画板 23 副本 2.png.meta | 3 +- .../results/画板 23 副本 3.png.meta | 3 +- .../results/画板 23 副本 4.png.meta | 3 +- .../results/画板 23 副本.png.meta | 3 +- .../results/画板 23.png.meta | 3 +- .../results/画板 37.png.meta | 3 +- .../results/画板 38.png.meta | 6 +- .../results/画板 62.png.meta | 3 +- .../results/画板 63.png.meta | 6 +- .../results/画板 64.png.meta | 3 +- .../results/画板 65.png.meta | 3 +- .../results/画板 66.png.meta | 3 +- .../results/画板 67.png.meta | 3 +- .../results/画板 68.png.meta | 3 +- .../results/画板 69.png.meta | 4 +- .../results/画板 70.png.meta | 3 +- .../results/画板 72.png.meta | 3 +- .../results/画板 73.png.meta | 3 +- .../results/画板 75.png.meta | 3 +- .../results/画板 77.png.meta | 3 +- .../results/画板 81.png.meta | 3 +- .../results/画板 82.png.meta | 3 +- .../results/画板 83.png.meta | 3 +- .../results/画板 84.png.meta | 3 +- .../results/画板 85.png.meta | 3 +- .../results/画板 86.png.meta | 3 +- .../results/画板 87.png.meta | 3 +- .../results/画板 88.png.meta | 3 +- .../results/画板 89.png.meta | 3 +- .../results/画板 91.png.meta | 6 +- .../results/画板 96.png.meta | 3 +- .../results/画板 97.png.meta | 3 +- .../results/画板A@4x.png.meta | 3 +- .../results/结算 副本 8.png.meta | 3 +- .../gamePlay_gamePlay/results/货币.png.meta | 4 +- .../results/逸乐共谋@4x.png.meta | 3 +- .../results/题海战术@4x.png.meta | 3 +- .../gamePlay_gamePlay/图层 15.png.meta | 3 +- .../圆角矩形 1 拷贝 2.png.meta | 3 +- .../圆角矩形 1 拷贝 3.png.meta | 3 +- .../gamePlay_gamePlay/画板 9 拷贝.png.meta | 3 +- .../gamePlay_gamePlay/画板 9.png.meta | 3 +- .../gamePlay_gamePlay/矩形 17 拷贝.png.meta | 4 +- .../gamePlay_gamePlay/矩形 2 拷贝-1.png.meta | 3 +- .../gamePlay_gamePlay/矩形 2 拷贝.png.meta | 3 +- .../gamePlay_gamePlay/矩形 9-1.png.meta | 7 +- .../gamePlay_gamePlay/矩形 9.png.meta | 7 +- .../selectYourSongFirst/New UI/BACK.png.meta | 3 +- .../New UI/Emilia.PNG.meta | 3 +- .../New UI/画板 36 副本.png.meta | 3 +- .../New UI/画板 43.png.meta | 3 +- .../New UI/画板 45.png.meta | 3 +- .../New UI/画板 46.png.meta | 3 +- .../New UI/画板 47.png.meta | 3 +- .../New UI/画板 48.png.meta | 3 +- .../New UI/画板 49.png.meta | 3 +- .../New UI/画板 50.png.meta | 3 +- .../New UI/画板 51.png.meta | 3 +- .../New UI/画板 53.png.meta | 6 +- .../New UI/画板 54.png.meta | 3 +- .../New UI/画板 58.png.meta | 3 +- .../New UI/画板 59.png.meta | 3 +- .../New UI/画板 61.png.meta | 3 +- .../New UI/画板 62.png.meta | 3 +- .../New UI/画板 63.png.meta | 3 +- .../New UI/画板 64.png.meta | 3 +- .../New UI/画板 65.png.meta | 3 +- .../New UI/画板 66.png.meta | 3 +- .../New UI/画板 67.png.meta | 3 +- .../New UI/画板 70.png.meta | 3 +- .../New UI/画板 72.png.meta | 3 +- .../selectYourSongFirst/New UI/背景.png.meta | 3 +- Assets/scripts/gamePlay_gameplay/BaseNote.cs | 3 - .../gamePlay_gameplay/BaseNote.cs.meta | 22 +- .../gamePlay_gameplay/BeatmapManager.cs | 40 +- .../gamePlay_gameplay/BeatmapManager.cs.meta | 22 +- .../scripts/gamePlay_gameplay/GameManager.cs | 72 +- .../gamePlay_gameplay/GameManager.cs.meta | 22 +- Assets/scripts/gamePlay_gameplay/HoldNote.cs | 446 +-- .../gamePlay_gameplay/HoldNote.cs.meta | 22 +- .../scripts/gamePlay_gameplay/InputManager.cs | 32 +- .../gamePlay_gameplay/InputManager.cs.meta | 22 +- .../scripts/gamePlay_gameplay/JudgeManager.cs | 134 +- .../gamePlay_gameplay/JudgeManager.cs.meta | 22 +- .../gamePlay_gameplay/KeyBindingManager.cs | 14 +- .../KeyBindingManager.cs.meta | 22 +- .../gamePlay_gameplay/NewBehaviourScript.cs | 8 +- .../NewBehaviourScript.cs.meta | 22 +- Assets/scripts/gamePlay_gameplay/Note.cs | 13 +- Assets/scripts/gamePlay_gameplay/Note.cs.meta | 22 +- .../gamePlay_gameplay/NoteController.cs | 6 +- Assets/scripts/gamePlay_gameplay/NotePool.cs | 26 +- .../gamePlay_gameplay/NotePool.cs.meta | 22 +- .../scripts/gamePlay_gameplay/NoteSpawner.cs | 126 +- .../gamePlay_gameplay/NoteSpawner.cs.meta | 22 +- .../gamePlay_gameplay/TrackKeyManager.cs | 8 +- 160 files changed, 5472 insertions(+), 841 deletions(-) create mode 100644 .vsconfig create mode 100644 Assets/StreamingAssets/KongJiaBin_@16.json create mode 100644 Assets/StreamingAssets/KongJiaBin_@16.json.meta create mode 100644 Assets/StreamingAssets/exampleSongName_@1.json create mode 100644 Assets/StreamingAssets/exampleSongName_@1.json.meta create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green.meta create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本 2.png create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本 2.png.meta create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本.png create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本.png.meta create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48.png create mode 100644 Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48.png.meta diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 00000000..f019fd0a --- /dev/null +++ b/.vsconfig @@ -0,0 +1,6 @@ +{ + "version": "1.0", + "components": [ + "Microsoft.VisualStudio.Workload.ManagedGame" + ] +} diff --git a/Assets/Resources/song_songIndex/1002001_emilia/bulele.png.meta b/Assets/Resources/song_songIndex/1002001_emilia/bulele.png.meta index cb16f477..72cd2b7a 100644 --- a/Assets/Resources/song_songIndex/1002001_emilia/bulele.png.meta +++ b/Assets/Resources/song_songIndex/1002001_emilia/bulele.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + bulele_0: -6637358036380113050 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002001_emilia/画板 51.png.meta b/Assets/Resources/song_songIndex/1002001_emilia/画板 51.png.meta index ae33b4c1..daebbb39 100644 --- a/Assets/Resources/song_songIndex/1002001_emilia/画板 51.png.meta +++ b/Assets/Resources/song_songIndex/1002001_emilia/画板 51.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 51_0": -6476085515980005160 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002002_Arcstar/b3.png.meta b/Assets/Resources/song_songIndex/1002002_Arcstar/b3.png.meta index a2cdec80..b7c16738 100644 --- a/Assets/Resources/song_songIndex/1002002_Arcstar/b3.png.meta +++ b/Assets/Resources/song_songIndex/1002002_Arcstar/b3.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + b3_0: -4826691987311988304 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002002_Arcstar/画板 54.png.meta b/Assets/Resources/song_songIndex/1002002_Arcstar/画板 54.png.meta index 2cec7085..33b51622 100644 --- a/Assets/Resources/song_songIndex/1002002_Arcstar/画板 54.png.meta +++ b/Assets/Resources/song_songIndex/1002002_Arcstar/画板 54.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 54_0": 7927275863035061635 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002003_spectrum/b5 1.png.meta b/Assets/Resources/song_songIndex/1002003_spectrum/b5 1.png.meta index 8349e0f7..5e4463e0 100644 --- a/Assets/Resources/song_songIndex/1002003_spectrum/b5 1.png.meta +++ b/Assets/Resources/song_songIndex/1002003_spectrum/b5 1.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + b5 1_0: -7799924972928060027 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002003_spectrum/画板 100.png.meta b/Assets/Resources/song_songIndex/1002003_spectrum/画板 100.png.meta index 8209540e..b9b85cf6 100644 --- a/Assets/Resources/song_songIndex/1002003_spectrum/画板 100.png.meta +++ b/Assets/Resources/song_songIndex/1002003_spectrum/画板 100.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 100_0": -2123976674619862345 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002003_spectrum/画板 62.png.meta b/Assets/Resources/song_songIndex/1002003_spectrum/画板 62.png.meta index 02c21463..93b6f9fd 100644 --- a/Assets/Resources/song_songIndex/1002003_spectrum/画板 62.png.meta +++ b/Assets/Resources/song_songIndex/1002003_spectrum/画板 62.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 62_0": 3531577268584615137 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002003_spectrum/画板 82.png.meta b/Assets/Resources/song_songIndex/1002003_spectrum/画板 82.png.meta index 4654c98a..0a8d960b 100644 --- a/Assets/Resources/song_songIndex/1002003_spectrum/画板 82.png.meta +++ b/Assets/Resources/song_songIndex/1002003_spectrum/画板 82.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 82_0": -5259063062820072331 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002004_smile/b4 1.png.meta b/Assets/Resources/song_songIndex/1002004_smile/b4 1.png.meta index 053105a2..2b24b2a9 100644 --- a/Assets/Resources/song_songIndex/1002004_smile/b4 1.png.meta +++ b/Assets/Resources/song_songIndex/1002004_smile/b4 1.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + b4 1_0: 1756885104968293705 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002004_smile/画板 61.png.meta b/Assets/Resources/song_songIndex/1002004_smile/画板 61.png.meta index cee7f65c..4f98094d 100644 --- a/Assets/Resources/song_songIndex/1002004_smile/画板 61.png.meta +++ b/Assets/Resources/song_songIndex/1002004_smile/画板 61.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 61_0": -3135778801375843317 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002005_BaboonBabbler/b1 1.png.meta b/Assets/Resources/song_songIndex/1002005_BaboonBabbler/b1 1.png.meta index 55962d5f..00d02ed0 100644 --- a/Assets/Resources/song_songIndex/1002005_BaboonBabbler/b1 1.png.meta +++ b/Assets/Resources/song_songIndex/1002005_BaboonBabbler/b1 1.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + b1 1_0: 7198530420090055930 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Resources/song_songIndex/1002005_BaboonBabbler/画板 58.png.meta b/Assets/Resources/song_songIndex/1002005_BaboonBabbler/画板 58.png.meta index 172eb8d9..1e9d86d6 100644 --- a/Assets/Resources/song_songIndex/1002005_BaboonBabbler/画板 58.png.meta +++ b/Assets/Resources/song_songIndex/1002005_BaboonBabbler/画板 58.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F 58_0": 374121266249343532 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/Scenes/gamePlay_gamePlay.unity b/Assets/Scenes/gamePlay_gamePlay.unity index e9747e0c..a1b5eec7 100644 --- a/Assets/Scenes/gamePlay_gamePlay.unity +++ b/Assets/Scenes/gamePlay_gamePlay.unity @@ -450,11 +450,8 @@ Transform: - {fileID: 1226913827} - {fileID: 1826377134} - {fileID: 228531562} - - {fileID: 937985803} - - {fileID: 660222738} - - {fileID: 219577658} - - {fileID: 1073653893} - - {fileID: 1010143987} + - {fileID: 2139343170} + - {fileID: 2023087422} - {fileID: 16261625} - {fileID: 1475663030} - {fileID: 1369160197} @@ -628,11 +625,11 @@ Transform: m_GameObject: {fileID: 219577657} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.04, y: -3.75, z: 0} + m_LocalPosition: {x: -1.3645483, y: -3.4014738, z: 0.053948075} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 180474807} + m_Father: {fileID: 2023087422} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &219577659 SpriteRenderer: @@ -2515,11 +2512,11 @@ Transform: m_GameObject: {fileID: 628867848} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5.0399995, y: -3.75, z: 0} + m_LocalPosition: {x: 3.2739055, y: -1.5379415, z: 0.046203207} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1397448125} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &628867852 Animator: @@ -2600,11 +2597,11 @@ Transform: m_GameObject: {fileID: 660222737} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2.46, y: -3.75, z: 0} + m_LocalPosition: {x: -3.8645482, y: -3.4014738, z: 0.053948075} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 180474807} + m_Father: {fileID: 2023087422} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &660222739 SpriteRenderer: @@ -3691,11 +3688,11 @@ Transform: m_GameObject: {fileID: 917849125} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -4.96, y: -3.75, z: 0} + m_LocalPosition: {x: -6.7260942, y: -1.5379415, z: 0.046203207} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1397448125} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &917849130 SpriteRenderer: @@ -3937,11 +3934,11 @@ Transform: m_GameObject: {fileID: 937985802} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -4.96, y: -3.75, z: 0} + m_LocalPosition: {x: -6.364548, y: -3.4014738, z: 0.053948075} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 180474807} + m_Father: {fileID: 2023087422} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &937985804 SpriteRenderer: @@ -4099,11 +4096,11 @@ Transform: m_GameObject: {fileID: 1010143986} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 5.04, y: -3.75, z: 0} + m_LocalPosition: {x: 3.6354518, y: -3.4014738, z: 0.053948075} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 180474807} + m_Father: {fileID: 2023087422} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &1010143988 SpriteRenderer: @@ -4321,11 +4318,11 @@ Transform: m_GameObject: {fileID: 1067482187} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.03999996, y: -3.75, z: 0} + m_LocalPosition: {x: -1.726094, y: -1.5379415, z: 0.046203207} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1397448125} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1067482191 Animator: @@ -4375,11 +4372,11 @@ Transform: m_GameObject: {fileID: 1073653892} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2.56, y: -3.75, z: 0} + m_LocalPosition: {x: 1.1554517, y: -3.4014738, z: 0.053948075} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 180474807} + m_Father: {fileID: 2023087422} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &1073653894 SpriteRenderer: @@ -5005,7 +5002,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &1226913827 Transform: m_ObjectHideFlags: 0 @@ -5428,7 +5425,7 @@ SpriteRenderer: m_SortingLayer: 0 m_SortingOrder: 100 m_Sprite: {fileID: 21300000, guid: 64077e82d9a4bf349a3d04385a13bf49, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 0.5882353} m_FlipX: 0 m_FlipY: 0 m_DrawMode: 0 @@ -5447,11 +5444,11 @@ Transform: m_GameObject: {fileID: 1293318055} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -2.46, y: -3.75, z: 0} + m_LocalPosition: {x: -4.2260942, y: -1.5379415, z: 0.046203207} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1397448125} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1293318059 Animator: @@ -5839,6 +5836,42 @@ MonoBehaviour: yellowEffect: {fileID: 1067482187} purpleEffect: {fileID: 1646396267} blueEffect: {fileID: 628867848} +--- !u!1 &1397448124 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1397448125} + m_Layer: 0 + m_Name: animations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1397448125 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1397448124} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.766094, y: -2.2120585, z: -0.046203207} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 917849126} + - {fileID: 1293318058} + - {fileID: 628867851} + - {fileID: 1067482190} + - {fileID: 1646396270} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1475663029 GameObject: m_ObjectHideFlags: 0 @@ -6296,7 +6329,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 5101488297413832068, guid: 7467acf871cf6ba4b864cfbd4361d056, type: 3} propertyPath: m_IsActive - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 8620966319055320140, guid: 7467acf871cf6ba4b864cfbd4361d056, type: 3} propertyPath: m_LocalPosition.x @@ -6358,7 +6391,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &1545566910 Transform: m_ObjectHideFlags: 0 @@ -6814,11 +6847,11 @@ Transform: m_GameObject: {fileID: 1646396267} serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2.56, y: -3.75, z: 0} + m_LocalPosition: {x: 0.793906, y: -1.5379415, z: 0.046203207} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1397448125} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1646396271 Animator: @@ -8124,6 +8157,42 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2023087421 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2023087422} + m_Layer: 0 + m_Name: colorLineStatic + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2023087422 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2023087421} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.4045483, y: 0, z: -0.053948075} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 937985803} + - {fileID: 660222738} + - {fileID: 219577658} + - {fileID: 1073653893} + - {fileID: 1010143987} + m_Father: {fileID: 180474807} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2028722820 GameObject: m_ObjectHideFlags: 0 @@ -8955,6 +9024,93 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2120816908} m_CullTransparentMesh: 1 +--- !u!1 &2139343169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2139343170} + - component: {fileID: 2139343171} + m_Layer: 0 + m_Name: "\u77E9\u5F62sdw 3 (1)" + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2139343170 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139343169} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -4.4588, z: 0} + m_LocalScale: {x: 1, y: 0.17429951, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 180474807} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2139343171 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139343169} + 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: 99 + m_Sprite: {fileID: 21300000, guid: 54a8345124041e4449300a0a6956b21e, type: 3} + m_Color: {r: 1, g: 0.504717, b: 0.504717, a: 0.62352943} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 11.99, y: 10.8} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 --- !u!1001 &52231264969946363 PrefabInstance: m_ObjectHideFlags: 0 @@ -11064,10 +11220,6 @@ SceneRoots: - {fileID: 669228357} - {fileID: 2039673890} - {fileID: 312501157} - - {fileID: 917849126} - - {fileID: 1293318058} - - {fileID: 628867851} - - {fileID: 1067482190} - - {fileID: 1646396270} + - {fileID: 1397448125} - {fileID: 1526173829} - {fileID: 180857950} diff --git a/Assets/StreamingAssets/KongJiaBin_@16.json b/Assets/StreamingAssets/KongJiaBin_@16.json new file mode 100644 index 00000000..7748b6cc --- /dev/null +++ b/Assets/StreamingAssets/KongJiaBin_@16.json @@ -0,0 +1,792 @@ +{ + "title": "KongJiaBin", + "composer": "kongsb", + "illustrator": "J3", + "charter": "7DayShuo", + "beatmapId": "9527", + "duration": 165, + "bpm": 155, + "difficulty": 16, + "difficultyName": "16", + "createdDate": "2025-07-21 19:28:46", + "musicFile": "E:/Unity/EaseOut_FreshNew_ChartEditor/tmpSong/songs/songsTmp/KongJiaBin/KongJiaBin_@16.mp3", + "backgroundFile": "E:/Unity/EaseOut_FreshNew_ChartEditor/tmpSong/songs/songsTmp/KongJiaBin/KongJiaBin_@16.jpg", + "noteAmount": 69, + "tracks": [ + { + "color": "red" + }, + { + "color": "green" + }, + { + "color": "yellow" + }, + { + "color": "purple" + }, + { + "color": "blue" + } + ], + "notes": [ + { + "time": 0.5605000257492065, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -171.9375, + "noteFunction": "" + }, + { + "time": 0.9476000070571899, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -104.5625, + "noteFunction": "" + }, + { + "time": 1.1411999464035035, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -70.875, + "noteFunction": "" + }, + { + "time": 1.3346999883651734, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -37.1875, + "noteFunction": "" + }, + { + "time": 1.5283000469207764, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -3.5, + "noteFunction": "" + }, + { + "time": 1.5283000469207764, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -3.5, + "noteFunction": "" + }, + { + "time": 1.7217999696731568, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 30.1875, + "noteFunction": "" + }, + { + "time": 1.9154000282287598, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 63.875, + "noteFunction": "" + }, + { + "time": 2.1089000701904299, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 97.5625, + "noteFunction": "" + }, + { + "time": 2.302500009536743, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 131.25, + "noteFunction": "" + }, + { + "time": 2.6895999908447267, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 198.625, + "noteFunction": "" + }, + { + "time": 2.6895999908447267, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 198.625, + "noteFunction": "" + }, + { + "time": 3.07669997215271, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 266.0, + "noteFunction": "" + }, + { + "time": 3.126800060272217, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -264.27081298828127, + "noteFunction": "" + }, + { + "time": 3.27020001411438, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -239.3125, + "noteFunction": "" + }, + { + "time": 3.4637999534606935, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -205.625, + "noteFunction": "" + }, + { + "time": 3.4637999534606935, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -205.625, + "noteFunction": "" + }, + { + "time": 3.8508999347686769, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -138.25, + "noteFunction": "" + }, + { + "time": 4.23799991607666, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 2, + "yPos": -70.86726379394531, + "noteFunction": "" + }, + { + "time": 4.23799991607666, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 2, + "yPos": -70.86726379394531, + "noteFunction": "" + }, + { + "time": 4.818600177764893, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 3.0968000888824465, + "barNumber": 2, + "yPos": 30.18742561340332, + "noteFunction": "" + }, + { + "time": 4.818600177764893, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 2, + "yPos": 30.18742561340332, + "noteFunction": "" + }, + { + "time": 4.818600177764893, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 2, + "yPos": 30.18742561340332, + "noteFunction": "" + }, + { + "time": 10.625100135803223, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": -37.17913055419922, + "noteFunction": "" + }, + { + "time": 10.818599700927735, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 4, + "yPos": -3.500127077102661, + "noteFunction": "" + }, + { + "time": 11.205699920654297, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 4, + "yPos": 63.87547302246094, + "noteFunction": "" + }, + { + "time": 11.205699920654297, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 4, + "yPos": 63.87547302246094, + "noteFunction": "" + }, + { + "time": 11.205699920654297, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 4, + "yPos": 63.87547302246094, + "noteFunction": "" + }, + { + "time": 11.205699920654297, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 4, + "yPos": 63.87547302246094, + "noteFunction": "" + }, + { + "time": 17.399200439453126, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 6, + "yPos": 63.8671760559082, + "noteFunction": "" + }, + { + "time": 17.399200439453126, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 6, + "yPos": 63.8671760559082, + "noteFunction": "" + }, + { + "time": 17.399200439453126, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 6, + "yPos": 63.8671760559082, + "noteFunction": "" + }, + { + "time": 17.399200439453126, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 6, + "yPos": 63.8671760559082, + "noteFunction": "" + }, + { + "time": 17.399200439453126, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 6, + "yPos": 63.8671760559082, + "noteFunction": "" + }, + { + "time": 23.59280014038086, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 8, + "yPos": 63.876136779785159, + "noteFunction": "" + }, + { + "time": 23.59280014038086, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 8, + "yPos": 63.876136779785159, + "noteFunction": "" + }, + { + "time": 23.59280014038086, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 8, + "yPos": 63.876136779785159, + "noteFunction": "" + }, + { + "time": 23.59280014038086, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 8, + "yPos": 63.876136779785159, + "noteFunction": "" + }, + { + "time": 23.59280014038086, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 8, + "yPos": 63.876136779785159, + "noteFunction": "" + }, + { + "time": 29.786300659179689, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 10, + "yPos": 63.86783981323242, + "noteFunction": "" + }, + { + "time": 29.786300659179689, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 10, + "yPos": 63.86783981323242, + "noteFunction": "" + }, + { + "time": 29.786300659179689, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 10, + "yPos": 63.86783981323242, + "noteFunction": "" + }, + { + "time": 29.786300659179689, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 10, + "yPos": 63.86783981323242, + "noteFunction": "" + }, + { + "time": 29.786300659179689, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 10, + "yPos": 63.86783981323242, + "noteFunction": "" + }, + { + "time": 35.97990036010742, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 12, + "yPos": 63.876800537109378, + "noteFunction": "" + }, + { + "time": 35.97990036010742, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 12, + "yPos": 63.876800537109378, + "noteFunction": "" + }, + { + "time": 35.97990036010742, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 12, + "yPos": 63.876800537109378, + "noteFunction": "" + }, + { + "time": 35.97990036010742, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 12, + "yPos": 63.876800537109378, + "noteFunction": "" + }, + { + "time": 35.97990036010742, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 12, + "yPos": 63.876800537109378, + "noteFunction": "" + }, + { + "time": 42.17340087890625, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 14, + "yPos": 63.86850357055664, + "noteFunction": "" + }, + { + "time": 42.17340087890625, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 14, + "yPos": 63.86850357055664, + "noteFunction": "" + }, + { + "time": 42.17340087890625, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 14, + "yPos": 63.86850357055664, + "noteFunction": "" + }, + { + "time": 42.17340087890625, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 14, + "yPos": 63.86850357055664, + "noteFunction": "" + }, + { + "time": 42.17340087890625, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 14, + "yPos": 63.86850357055664, + "noteFunction": "" + }, + { + "time": 48.367000579833987, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 16, + "yPos": 63.87746810913086, + "noteFunction": "" + }, + { + "time": 48.367000579833987, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 16, + "yPos": 63.87746810913086, + "noteFunction": "" + }, + { + "time": 48.367000579833987, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 16, + "yPos": 63.87746810913086, + "noteFunction": "" + }, + { + "time": 48.367000579833987, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 16, + "yPos": 63.87746810913086, + "noteFunction": "" + }, + { + "time": 48.367000579833987, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 16, + "yPos": 63.87746810913086, + "noteFunction": "" + }, + { + "time": 54.56050109863281, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 18, + "yPos": 63.86916732788086, + "noteFunction": "" + }, + { + "time": 54.56050109863281, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 18, + "yPos": 63.86916732788086, + "noteFunction": "" + }, + { + "time": 54.56050109863281, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 18, + "yPos": 63.86916732788086, + "noteFunction": "" + }, + { + "time": 54.56050109863281, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 18, + "yPos": 63.86916732788086, + "noteFunction": "" + }, + { + "time": 54.56050109863281, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 18, + "yPos": 63.86916732788086, + "noteFunction": "" + }, + { + "time": 60.75410079956055, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 6.0, + "barNumber": 20, + "yPos": 63.87813186645508, + "noteFunction": "" + }, + { + "time": 60.75410079956055, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 6.0, + "barNumber": 20, + "yPos": 63.87813186645508, + "noteFunction": "" + }, + { + "time": 60.75410079956055, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 6.0, + "barNumber": 20, + "yPos": 63.87813186645508, + "noteFunction": "" + }, + { + "time": 60.75410079956055, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 6.0, + "barNumber": 20, + "yPos": 63.87813186645508, + "noteFunction": "" + }, + { + "time": 60.75410079956055, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 6.0, + "barNumber": 20, + "yPos": 63.87813186645508, + "noteFunction": "" + } + ], + "enemyList_isEmpty": false, + "colorSegments": [], + "is_official": true, + "noteStatistics": [ + { + "colorType": "red_tap", + "count": 3 + }, + { + "colorType": "green_tap", + "count": 4 + }, + { + "colorType": "yellow_tap", + "count": 4 + }, + { + "colorType": "purple_tap", + "count": 5 + }, + { + "colorType": "blue_tap", + "count": 3 + }, + { + "colorType": "purple_hold", + "count": 10 + }, + { + "colorType": "blue_hold", + "count": 10 + }, + { + "colorType": "red_hold", + "count": 10 + }, + { + "colorType": "green_hold", + "count": 10 + }, + { + "colorType": "yellow_hold", + "count": 10 + } + ], + "trackStates": { + "trackFading_active": false, + "red": { + "isOn": false, + "fadeTime": 0.0 + }, + "green": { + "isOn": false, + "fadeTime": 0.0 + }, + "yellow": { + "isOn": false, + "fadeTime": 0.0 + }, + "purple": { + "isOn": false, + "fadeTime": 0.0 + }, + "blue": { + "isOn": false, + "fadeTime": 0.0 + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/KongJiaBin_@16.json.meta b/Assets/StreamingAssets/KongJiaBin_@16.json.meta new file mode 100644 index 00000000..002e6343 --- /dev/null +++ b/Assets/StreamingAssets/KongJiaBin_@16.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e29f59e32229ac84ea59aab9113eb726 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/exampleSongName_@1.json b/Assets/StreamingAssets/exampleSongName_@1.json new file mode 100644 index 00000000..dce9fdcf --- /dev/null +++ b/Assets/StreamingAssets/exampleSongName_@1.json @@ -0,0 +1,3233 @@ +{ + "title": "exampleSongName", + "composer": "1", + "illustrator": "1", + "charter": "1", + "beatmapId": "1", + "duration": 222, + "bpm": 600, + "difficulty": 1, + "difficultyName": "1", + "createdDate": "2025-07-19 16:31:21", + "musicFile": "E:/Unity/EaseOut_FreshNew_ChartEditor/tmpSong/songs/songsTmp/exampleSongName/exampleSongName_@1.mp3", + "backgroundFile": "E:/Unity/EaseOut_FreshNew_ChartEditor/tmpSong/songs/songsTmp/exampleSongName/exampleSongName_@1.png", + "noteAmount": 311, + "tracks": [ + { + "color": "red" + }, + { + "color": "green" + }, + { + "color": "yellow" + }, + { + "color": "purple" + }, + { + "color": "blue" + } + ], + "notes": [ + { + "time": 0.043299999088048938, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -240.32662963867188, + "noteFunction": "" + }, + { + "time": 0.093299999833107, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -206.63912963867188, + "noteFunction": "" + }, + { + "time": 0.0934000015258789, + "trackIndex": 2, + "color": "green", + "type": "hold", + "length": 0.20000000298023225, + "barNumber": 1, + "yPos": -206.57174682617188, + "noteFunction": "" + }, + { + "time": 0.14350000023841859, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -172.81687927246095, + "noteFunction": "" + }, + { + "time": 0.14350000023841859, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -172.81687927246095, + "noteFunction": "" + }, + { + "time": 0.15520000457763673, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -164.9340057373047, + "noteFunction": "" + }, + { + "time": 0.20520000159740449, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -131.2465057373047, + "noteFunction": "" + }, + { + "time": 0.2476000040769577, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -102.67949676513672, + "noteFunction": "" + }, + { + "time": 0.2485000044107437, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 1, + "yPos": -102.07312774658203, + "noteFunction": "" + }, + { + "time": 0.25519999861717226, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -97.55900573730469, + "noteFunction": "" + }, + { + "time": 0.2840999960899353, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -78.08763122558594, + "noteFunction": "poison" + }, + { + "time": 0.3052000105381012, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -63.87149429321289, + "noteFunction": "" + }, + { + "time": 0.35519999265670779, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -30.18400764465332, + "noteFunction": "" + }, + { + "time": 0.3799000084400177, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -13.542372703552246, + "noteFunction": "" + }, + { + "time": 0.3880000114440918, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": -8.084996223449707, + "noteFunction": "" + }, + { + "time": 0.4052000045776367, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 3.5034990310668947, + "noteFunction": "" + }, + { + "time": 0.44279998540878298, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 28.836484909057618, + "noteFunction": "" + }, + { + "time": 0.44440001249313357, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 29.91450309753418, + "noteFunction": "" + }, + { + "time": 0.4551999866962433, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 37.19098663330078, + "noteFunction": "" + }, + { + "time": 0.48910000920295718, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 60.0311279296875, + "noteFunction": "" + }, + { + "time": 0.5052000284194946, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 70.8785171508789, + "noteFunction": "" + }, + { + "time": 0.5199000239372253, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 80.78263854980469, + "noteFunction": "" + }, + { + "time": 0.5543000102043152, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 103.95962524414063, + "noteFunction": "" + }, + { + "time": 0.5597000122070313, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 107.5978775024414, + "noteFunction": "" + }, + { + "time": 0.5931000113487244, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 130.1011199951172, + "noteFunction": "" + }, + { + "time": 0.6277999877929688, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 153.48023986816407, + "noteFunction": "" + }, + { + "time": 0.6801999807357788, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 188.78472900390626, + "noteFunction": "" + }, + { + "time": 0.6919999718666077, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 196.73497009277345, + "noteFunction": "" + }, + { + "time": 0.6919999718666077, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 196.73497009277345, + "noteFunction": "" + }, + { + "time": 0.6958000063896179, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 199.2952423095703, + "noteFunction": "" + }, + { + "time": 0.7301999926567078, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 222.4722442626953, + "noteFunction": "" + }, + { + "time": 0.7612000107765198, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 243.35850524902345, + "noteFunction": "" + }, + { + "time": 0.7652000188827515, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 246.0535125732422, + "noteFunction": "" + }, + { + "time": 0.7742000222206116, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 252.1172637939453, + "noteFunction": "" + }, + { + "time": 0.7802000045776367, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 1, + "yPos": 256.1597595214844, + "noteFunction": "" + }, + { + "time": 0.8432999849319458, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -240.32664489746095, + "noteFunction": "" + }, + { + "time": 0.8432999849319458, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -240.32664489746095, + "noteFunction": "" + }, + { + "time": 0.8921999931335449, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -207.38026428222657, + "noteFunction": "" + }, + { + "time": 0.9151999950408936, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -191.88401794433595, + "noteFunction": "" + }, + { + "time": 0.9271000027656555, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 2, + "yPos": -183.8663787841797, + "noteFunction": "" + }, + { + "time": 0.9433000087738037, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -172.95162963867188, + "noteFunction": "" + }, + { + "time": 0.9627000093460083, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -159.88087463378907, + "noteFunction": "" + }, + { + "time": 0.9933000206947327, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -139.2641143798828, + "noteFunction": "" + }, + { + "time": 1.0433000326156617, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -105.57661437988281, + "noteFunction": "" + }, + { + "time": 1.0932999849319459, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -71.88914489746094, + "noteFunction": "" + }, + { + "time": 1.1495000123977662, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": -34.02437973022461, + "noteFunction": "" + }, + { + "time": 1.2034000158309937, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 2, + "yPos": 2.2907485961914064, + "noteFunction": "" + }, + { + "time": 1.2303999662399293, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 20.481964111328126, + "noteFunction": "" + }, + { + "time": 1.243299961090088, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 29.173336029052736, + "noteFunction": "" + }, + { + "time": 1.2933000326156617, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 62.86088562011719, + "noteFunction": "" + }, + { + "time": 1.3432999849319459, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 96.54835510253906, + "noteFunction": "" + }, + { + "time": 1.392199993133545, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 129.49473571777345, + "noteFunction": "" + }, + { + "time": 1.503999948501587, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 2, + "yPos": 204.8199462890625, + "noteFunction": "" + }, + { + "time": 1.6904000043869019, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 3, + "yPos": -208.593017578125, + "noteFunction": "" + }, + { + "time": 1.6904000043869019, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 3, + "yPos": -208.593017578125, + "noteFunction": "" + }, + { + "time": 1.6969000101089478, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 3, + "yPos": -204.21363830566407, + "noteFunction": "" + }, + { + "time": 1.7904000282287598, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 3, + "yPos": -141.21800231933595, + "noteFunction": "" + }, + { + "time": 1.9843000173568726, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 3, + "yPos": -10.577882766723633, + "noteFunction": "" + }, + { + "time": 2.0381999015808107, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 3, + "yPos": 25.737163543701173, + "noteFunction": "" + }, + { + "time": 2.1050000190734865, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 3, + "yPos": 70.74374389648438, + "noteFunction": "" + }, + { + "time": 2.1858999729156496, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 3, + "yPos": 125.25008392333985, + "noteFunction": "" + }, + { + "time": 2.1949000358581545, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 3, + "yPos": 131.31387329101563, + "noteFunction": "" + }, + { + "time": 2.2488999366760256, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 3, + "yPos": 167.69630432128907, + "noteFunction": "" + }, + { + "time": 2.4904000759124758, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 4, + "yPos": -208.5929718017578, + "noteFunction": "" + }, + { + "time": 2.4904000759124758, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 4, + "yPos": -208.5929718017578, + "noteFunction": "" + }, + { + "time": 2.6644999980926515, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 4, + "yPos": -91.29315185546875, + "noteFunction": "" + }, + { + "time": 2.77239990234375, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 4, + "yPos": -18.59559440612793, + "noteFunction": "" + }, + { + "time": 2.880199909210205, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": 54.03466033935547, + "noteFunction": "" + }, + { + "time": 2.90339994430542, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 4, + "yPos": 69.66567993164063, + "noteFunction": "" + }, + { + "time": 2.988100051879883, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": 126.73238372802735, + "noteFunction": "" + }, + { + "time": 3.0601000785827638, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": 175.24240112304688, + "noteFunction": "" + }, + { + "time": 3.1268999576568605, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": 220.24880981445313, + "noteFunction": "" + }, + { + "time": 3.1898000240325929, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 4, + "yPos": 262.62774658203127, + "noteFunction": "" + }, + { + "time": 3.2265000343322756, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -251.6456298828125, + "noteFunction": "" + }, + { + "time": 3.2985000610351564, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -203.1356201171875, + "noteFunction": "" + }, + { + "time": 3.3164000511169435, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -191.07550048828126, + "noteFunction": "" + }, + { + "time": 3.3164000511169435, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -191.07550048828126, + "noteFunction": "" + }, + { + "time": 3.3613998889923097, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -160.75685119628907, + "noteFunction": "" + }, + { + "time": 3.4024999141693117, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -133.0657196044922, + "noteFunction": "" + }, + { + "time": 3.5618999004364015, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": -25.66997718811035, + "noteFunction": "" + }, + { + "time": 3.6745998859405519, + "trackIndex": 1, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 50.261634826660159, + "noteFunction": "poison" + }, + { + "time": 3.7246999740600588, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 84.01657104492188, + "noteFunction": "" + }, + { + "time": 3.7414000034332277, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 95.2682113647461, + "noteFunction": "" + }, + { + "time": 3.7915000915527345, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 129.0231475830078, + "noteFunction": "" + }, + { + "time": 3.850600004196167, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 168.8417205810547, + "noteFunction": "" + }, + { + "time": 3.859600067138672, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 174.90550231933595, + "noteFunction": "" + }, + { + "time": 3.8814001083374025, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 189.59327697753907, + "noteFunction": "" + }, + { + "time": 3.908400058746338, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 207.7845001220703, + "noteFunction": "" + }, + { + "time": 3.9173998832702638, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 213.84812927246095, + "noteFunction": "" + }, + { + "time": 3.980299949645996, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 5, + "yPos": 256.22705078125, + "noteFunction": "" + }, + { + "time": 4.034299850463867, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -246.39051818847657, + "noteFunction": "" + }, + { + "time": 4.047100067138672, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -237.76637268066407, + "noteFunction": "" + }, + { + "time": 4.048399925231934, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -236.89059448242188, + "noteFunction": "" + }, + { + "time": 4.065100193023682, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -225.63877868652345, + "noteFunction": "" + }, + { + "time": 4.07919979095459, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -216.13917541503907, + "noteFunction": "" + }, + { + "time": 4.133200168609619, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -179.7564239501953, + "noteFunction": "" + }, + { + "time": 4.145999908447266, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -171.13259887695313, + "noteFunction": "" + }, + { + "time": 4.15500020980835, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -165.0686492919922, + "noteFunction": "" + }, + { + "time": 4.196100234985352, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -137.37750244140626, + "noteFunction": "" + }, + { + "time": 4.208899974822998, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -128.75367736816407, + "noteFunction": "" + }, + { + "time": 4.246200084686279, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -103.62273406982422, + "noteFunction": "" + }, + { + "time": 4.25, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -101.06254577636719, + "noteFunction": "" + }, + { + "time": 4.258999824523926, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -94.99890899658203, + "noteFunction": "" + }, + { + "time": 4.26800012588501, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -88.9349594116211, + "noteFunction": "" + }, + { + "time": 4.29040002822876, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -73.84302520751953, + "noteFunction": "" + }, + { + "time": 4.29040002822876, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -73.84302520751953, + "noteFunction": "" + }, + { + "time": 4.359600067138672, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 6, + "yPos": -27.219497680664064, + "noteFunction": "" + }, + { + "time": 4.390399932861328, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": -6.4680891036987309, + "noteFunction": "" + }, + { + "time": 4.435400009155273, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 6, + "yPos": 23.850711822509767, + "noteFunction": "" + }, + { + "time": 4.4903998374938969, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": 60.90684509277344, + "noteFunction": "" + }, + { + "time": 4.4944000244140629, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 6, + "yPos": 63.60197067260742, + "noteFunction": "" + }, + { + "time": 4.521399974822998, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 6, + "yPos": 81.7931900024414, + "noteFunction": "" + }, + { + "time": 4.590400218963623, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 6, + "yPos": 128.2821044921875, + "noteFunction": "" + }, + { + "time": 4.638299942016602, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 6, + "yPos": 160.55453491210938, + "noteFunction": "" + }, + { + "time": 5.1631999015808109, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": -24.794118881225587, + "noteFunction": "" + }, + { + "time": 5.1722002029418949, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": -18.730165481567384, + "noteFunction": "" + }, + { + "time": 5.208199977874756, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 5.524682998657227, + "noteFunction": "" + }, + { + "time": 5.226200103759766, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 17.652267456054689, + "noteFunction": "" + }, + { + "time": 5.2530999183654789, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 35.77601623535156, + "noteFunction": "" + }, + { + "time": 5.267300128936768, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 45.34341049194336, + "noteFunction": "" + }, + { + "time": 5.271100044250488, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 47.903602600097659, + "noteFunction": "" + }, + { + "time": 5.303199768066406, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 69.53079223632813, + "noteFunction": "" + }, + { + "time": 5.30709981918335, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 72.158447265625, + "noteFunction": "" + }, + { + "time": 5.30709981918335, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 72.158447265625, + "noteFunction": "" + }, + { + "time": 5.3109002113342289, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 74.71896362304688, + "noteFunction": "" + }, + { + "time": 5.321199893951416, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 81.65837860107422, + "noteFunction": "" + }, + { + "time": 5.3520002365112309, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 102.41010284423828, + "noteFunction": "" + }, + { + "time": 5.3572001457214359, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 105.91354370117188, + "noteFunction": "" + }, + { + "time": 5.3572001457214359, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 105.91354370117188, + "noteFunction": "" + }, + { + "time": 5.361000061035156, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 108.47373962402344, + "noteFunction": "" + }, + { + "time": 5.375100135803223, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 117.97366333007813, + "noteFunction": "" + }, + { + "time": 5.406000137329102, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 138.79254150390626, + "noteFunction": "" + }, + { + "time": 5.406000137329102, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 138.79254150390626, + "noteFunction": "" + }, + { + "time": 5.423999786376953, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 150.9197998046875, + "noteFunction": "" + }, + { + "time": 5.4328999519348148, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 156.91629028320313, + "noteFunction": "" + }, + { + "time": 5.450900077819824, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 169.0438690185547, + "noteFunction": "" + }, + { + "time": 5.452099800109863, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 169.85218811035157, + "noteFunction": "" + }, + { + "time": 5.4868998527526859, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 193.29872131347657, + "noteFunction": "" + }, + { + "time": 5.49970006942749, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 201.92286682128907, + "noteFunction": "" + }, + { + "time": 5.508699893951416, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 207.9864959716797, + "noteFunction": "" + }, + { + "time": 5.510000228881836, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 208.8625946044922, + "noteFunction": "" + }, + { + "time": 5.541999816894531, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 230.4223175048828, + "noteFunction": "" + }, + { + "time": 5.549799919128418, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 235.67764282226563, + "noteFunction": "" + }, + { + "time": 5.571700096130371, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 250.43287658691407, + "noteFunction": "" + }, + { + "time": 5.57289981842041, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 251.24119567871095, + "noteFunction": "" + }, + { + "time": 5.5858001708984379, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 7, + "yPos": 259.93280029296877, + "noteFunction": "" + }, + { + "time": 5.612800121307373, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -260.8759765625, + "noteFunction": "" + }, + { + "time": 5.631899833679199, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -248.00753784179688, + "noteFunction": "" + }, + { + "time": 5.639699935913086, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -242.75222778320313, + "noteFunction": "" + }, + { + "time": 5.64870023727417, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -236.6882781982422, + "noteFunction": "" + }, + { + "time": 5.657700061798096, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -230.6246337890625, + "noteFunction": "" + }, + { + "time": 5.664000034332275, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -226.38003540039063, + "noteFunction": "" + }, + { + "time": 5.688499927520752, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -209.87322998046876, + "noteFunction": "" + }, + { + "time": 5.70389986038208, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -199.49752807617188, + "noteFunction": "" + }, + { + "time": 5.723100185394287, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -186.56130981445313, + "noteFunction": "" + }, + { + "time": 5.723100185394287, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -186.56130981445313, + "noteFunction": "" + }, + { + "time": 5.7270002365112309, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -183.93365478515626, + "noteFunction": "" + }, + { + "time": 5.748799800872803, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -169.24618530273438, + "noteFunction": "" + }, + { + "time": 5.7758002281188969, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -151.05465698242188, + "noteFunction": "" + }, + { + "time": 5.798900127410889, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -135.49110412597657, + "noteFunction": "" + }, + { + "time": 5.802800178527832, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -132.86343383789063, + "noteFunction": "" + }, + { + "time": 5.804100036621094, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -131.98765563964845, + "noteFunction": "" + }, + { + "time": 5.829699993133545, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -114.73968505859375, + "noteFunction": "" + }, + { + "time": 5.865699768066406, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -90.4848403930664, + "noteFunction": "" + }, + { + "time": 5.870800018310547, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -87.04854583740235, + "noteFunction": "" + }, + { + "time": 5.875999927520752, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -83.54510498046875, + "noteFunction": "" + }, + { + "time": 5.875999927520752, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -83.54510498046875, + "noteFunction": "" + }, + { + "time": 5.888800144195557, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -74.92095947265625, + "noteFunction": "" + }, + { + "time": 5.929900169372559, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -47.229820251464847, + "noteFunction": "" + }, + { + "time": 5.937600135803223, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -42.041969299316409, + "noteFunction": "" + }, + { + "time": 5.942800045013428, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -38.53852844238281, + "noteFunction": "" + }, + { + "time": 5.956900119781494, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -29.038604736328126, + "noteFunction": "" + }, + { + "time": 5.964600086212158, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -23.850751876831056, + "noteFunction": "" + }, + { + "time": 5.996699810028076, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": -2.2235631942749025, + "noteFunction": "" + }, + { + "time": 6.00570011138916, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 3.8403897285461427, + "noteFunction": "" + }, + { + "time": 6.010799884796143, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 7.27636194229126, + "noteFunction": "" + }, + { + "time": 6.059700012207031, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 40.22282409667969, + "noteFunction": "" + }, + { + "time": 6.096700191497803, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 8, + "yPos": 65.15169525146485, + "noteFunction": "" + }, + { + "time": 6.108500003814697, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 73.10181427001953, + "noteFunction": "" + }, + { + "time": 6.155799865722656, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 104.97010040283203, + "noteFunction": "" + }, + { + "time": 6.196899890899658, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 8, + "yPos": 132.66123962402345, + "noteFunction": "" + }, + { + "time": 6.218800067901611, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 147.41648864746095, + "noteFunction": "" + }, + { + "time": 6.249599933624268, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 8, + "yPos": 168.1678924560547, + "noteFunction": "" + }, + { + "time": 6.362599849700928, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 244.3015899658203, + "noteFunction": "" + }, + { + "time": 6.369800090789795, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 8, + "yPos": 249.15274047851563, + "noteFunction": "" + }, + { + "time": 6.456399917602539, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -231.50062561035157, + "noteFunction": "" + }, + { + "time": 6.518799781799316, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -189.45870971679688, + "noteFunction": "" + }, + { + "time": 6.531099796295166, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -181.1715850830078, + "noteFunction": "" + }, + { + "time": 6.569399833679199, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -155.36692810058595, + "noteFunction": "" + }, + { + "time": 6.632299900054932, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -112.98800659179688, + "noteFunction": "" + }, + { + "time": 6.639599800109863, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -108.0697021484375, + "noteFunction": "" + }, + { + "time": 6.6570000648498539, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -96.34627532958985, + "noteFunction": "" + }, + { + "time": 6.729499816894531, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -47.49956512451172, + "noteFunction": "" + }, + { + "time": 6.734000205993652, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -44.467430114746097, + "noteFunction": "" + }, + { + "time": 6.769999980926514, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -20.212581634521486, + "noteFunction": "" + }, + { + "time": 6.797599792480469, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": -1.6172080039978028, + "noteFunction": "" + }, + { + "time": 6.80079984664917, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 0.5388283729553223, + "noteFunction": "" + }, + { + "time": 6.81879997253418, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 12.666413307189942, + "noteFunction": "" + }, + { + "time": 6.867599964141846, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 45.545406341552737, + "noteFunction": "" + }, + { + "time": 6.908699989318848, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 73.2365493774414, + "noteFunction": "" + }, + { + "time": 6.921599864959717, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 81.92784118652344, + "noteFunction": "" + }, + { + "time": 6.926700115203857, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 85.3641357421875, + "noteFunction": "" + }, + { + "time": 6.936299800872803, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 91.83192443847656, + "noteFunction": "" + }, + { + "time": 6.971700191497803, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 115.68293762207031, + "noteFunction": "" + }, + { + "time": 7.011499881744385, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 142.4979705810547, + "noteFunction": "" + }, + { + "time": 7.0295000076293949, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 154.6255645751953, + "noteFunction": "" + }, + { + "time": 7.155200004577637, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 9, + "yPos": 239.31593322753907, + "noteFunction": "" + }, + { + "time": 7.20550012588501, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -265.79437255859377, + "noteFunction": "" + }, + { + "time": 7.255199909210205, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -232.3091278076172, + "noteFunction": "" + }, + { + "time": 7.293700218200684, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -206.3695526123047, + "noteFunction": "" + }, + { + "time": 7.305200099945068, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -198.6215057373047, + "noteFunction": "" + }, + { + "time": 7.355199813842773, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -164.9342041015625, + "noteFunction": "" + }, + { + "time": 7.360499858856201, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 10, + "yPos": -161.36329650878907, + "noteFunction": "" + }, + { + "time": 7.368299961090088, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -156.10797119140626, + "noteFunction": "" + }, + { + "time": 7.368299961090088, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -156.10797119140626, + "noteFunction": "" + }, + { + "time": 7.405200004577637, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -131.24656677246095, + "noteFunction": "" + }, + { + "time": 7.418300151824951, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -122.42034912109375, + "noteFunction": "" + }, + { + "time": 7.418300151824951, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -122.42034912109375, + "noteFunction": "" + }, + { + "time": 7.4552001953125, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -97.55894470214844, + "noteFunction": "" + }, + { + "time": 7.468299865722656, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -88.73303985595703, + "noteFunction": "" + }, + { + "time": 7.469699859619141, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 10, + "yPos": -87.789794921875, + "noteFunction": "" + }, + { + "time": 7.493299961090088, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -71.88922882080078, + "noteFunction": "" + }, + { + "time": 7.505199909210205, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -63.87163543701172, + "noteFunction": "" + }, + { + "time": 7.5183000564575199, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -55.045413970947269, + "noteFunction": "" + }, + { + "time": 7.543300151824951, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -38.20159912109375, + "noteFunction": "" + }, + { + "time": 7.555200099945068, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -30.18400764465332, + "noteFunction": "" + }, + { + "time": 7.568299770355225, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -21.35810661315918, + "noteFunction": "" + }, + { + "time": 7.593299865722656, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": -4.514291763305664, + "noteFunction": "" + }, + { + "time": 7.605199813842773, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 3.503298282623291, + "noteFunction": "" + }, + { + "time": 7.618299961090088, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 12.329522132873536, + "noteFunction": "" + }, + { + "time": 7.6433000564575199, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 29.173336029052736, + "noteFunction": "" + }, + { + "time": 7.655200004577637, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 37.19092559814453, + "noteFunction": "" + }, + { + "time": 7.668300151824951, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 46.01715087890625, + "noteFunction": "" + }, + { + "time": 7.693299770355225, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 62.86064147949219, + "noteFunction": "" + }, + { + "time": 7.7052001953125, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 70.87855529785156, + "noteFunction": "" + }, + { + "time": 7.718299865722656, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 79.70446014404297, + "noteFunction": "" + }, + { + "time": 7.743299961090088, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 96.54827117919922, + "noteFunction": "" + }, + { + "time": 7.755199909210205, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 104.56586456298828, + "noteFunction": "" + }, + { + "time": 7.7683000564575199, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 113.39208221435547, + "noteFunction": "" + }, + { + "time": 7.793300151824951, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 130.23590087890626, + "noteFunction": "" + }, + { + "time": 7.805200099945068, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 138.2534942626953, + "noteFunction": "" + }, + { + "time": 7.818299770355225, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 147.0793914794922, + "noteFunction": "" + }, + { + "time": 7.843299865722656, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 163.92320251464845, + "noteFunction": "" + }, + { + "time": 7.855199813842773, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 171.9407958984375, + "noteFunction": "" + }, + { + "time": 7.868299961090088, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 180.7670135498047, + "noteFunction": "" + }, + { + "time": 7.8933000564575199, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 197.61083984375, + "noteFunction": "" + }, + { + "time": 7.905200004577637, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 205.62841796875, + "noteFunction": "" + }, + { + "time": 7.918300151824951, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 214.45465087890626, + "noteFunction": "" + }, + { + "time": 7.943299770355225, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 231.2981414794922, + "noteFunction": "" + }, + { + "time": 7.9552001953125, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 10, + "yPos": 239.31605529785157, + "noteFunction": "" + }, + { + "time": 8.335700035095215, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": -43.32218551635742, + "noteFunction": "" + }, + { + "time": 8.390399932861329, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": -6.468129634857178, + "noteFunction": "" + }, + { + "time": 8.390399932861329, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": -6.468129634857178, + "noteFunction": "" + }, + { + "time": 8.449000358581543, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 33.01390838623047, + "noteFunction": "" + }, + { + "time": 8.465399742126465, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 44.062992095947269, + "noteFunction": "" + }, + { + "time": 8.515399932861329, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 77.75061798095703, + "noteFunction": "" + }, + { + "time": 8.515399932861329, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 77.75061798095703, + "noteFunction": "" + }, + { + "time": 8.565400123596192, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 111.43824768066406, + "noteFunction": "" + }, + { + "time": 8.615400314331055, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 145.12586975097657, + "noteFunction": "" + }, + { + "time": 8.690400123596192, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 195.65699768066407, + "noteFunction": "" + }, + { + "time": 8.690400123596192, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 195.65699768066407, + "noteFunction": "" + }, + { + "time": 8.690400123596192, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 195.65699768066407, + "noteFunction": "" + }, + { + "time": 8.690400123596192, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 195.65699768066407, + "noteFunction": "" + }, + { + "time": 8.690400123596192, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 11, + "yPos": 195.65699768066407, + "noteFunction": "" + }, + { + "time": 8.844799995422364, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -239.3160858154297, + "noteFunction": "" + }, + { + "time": 8.894800186157227, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -205.6284637451172, + "noteFunction": "" + }, + { + "time": 8.894800186157227, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 12, + "yPos": -205.6284637451172, + "noteFunction": "" + }, + { + "time": 8.94480037689209, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 12, + "yPos": -171.9408416748047, + "noteFunction": "" + }, + { + "time": 8.994799613952637, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 12, + "yPos": -138.25384521484376, + "noteFunction": "" + }, + { + "time": 8.994799613952637, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -138.25384521484376, + "noteFunction": "" + }, + { + "time": 8.994799613952637, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 12, + "yPos": -138.25384521484376, + "noteFunction": "" + }, + { + "time": 9.0447998046875, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -104.56622314453125, + "noteFunction": "" + }, + { + "time": 9.094799995422364, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -70.87859344482422, + "noteFunction": "" + }, + { + "time": 9.144800186157227, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": -37.19096755981445, + "noteFunction": "" + }, + { + "time": 9.318300247192383, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 79.70469665527344, + "noteFunction": "" + }, + { + "time": 9.368300437927246, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 113.39232635498047, + "noteFunction": "" + }, + { + "time": 9.418299674987793, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 147.07931518554688, + "noteFunction": "" + }, + { + "time": 9.468299865722657, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 180.76693725585938, + "noteFunction": "" + }, + { + "time": 9.51830005645752, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 214.45457458496095, + "noteFunction": "" + }, + { + "time": 9.568300247192383, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 12, + "yPos": 248.14219665527345, + "noteFunction": "" + }, + { + "time": 9.64330005645752, + "trackIndex": 2, + "color": "yellow", + "type": "hold", + "length": 1.0, + "barNumber": 13, + "yPos": -240.32669067382813, + "noteFunction": "" + }, + { + "time": 9.64330005645752, + "trackIndex": 3, + "color": "purple", + "type": "hold", + "length": 1.0, + "barNumber": 13, + "yPos": -240.32669067382813, + "noteFunction": "" + }, + { + "time": 9.64330005645752, + "trackIndex": 4, + "color": "blue", + "type": "hold", + "length": 1.0, + "barNumber": 13, + "yPos": -240.32669067382813, + "noteFunction": "" + }, + { + "time": 9.668299674987793, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 13, + "yPos": -223.48318481445313, + "noteFunction": "" + }, + { + "time": 9.718299865722657, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 13, + "yPos": -189.79556274414063, + "noteFunction": "" + }, + { + "time": 9.76830005645752, + "trackIndex": 0, + "color": "red", + "type": "hold", + "length": 1.0, + "barNumber": 13, + "yPos": -156.10794067382813, + "noteFunction": "" + }, + { + "time": 9.843299865722657, + "trackIndex": 1, + "color": "green", + "type": "hold", + "length": 1.0, + "barNumber": 13, + "yPos": -105.57681274414063, + "noteFunction": "" + }, + { + "time": 10.07409954071045, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 13, + "yPos": 49.92446517944336, + "noteFunction": "" + }, + { + "time": 10.663700103759766, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 14, + "yPos": -91.83216094970703, + "noteFunction": "" + }, + { + "time": 11.605899810791016, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 15, + "yPos": 3.9748809337615969, + "noteFunction": "" + }, + { + "time": 11.860300064086914, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 15, + "yPos": 175.37704467773438, + "noteFunction": "" + }, + { + "time": 12.372300148010254, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 16, + "yPos": -18.662899017333986, + "noteFunction": "" + }, + { + "time": 13.227299690246582, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 17, + "yPos": 18.393033981323243, + "noteFunction": "" + }, + { + "time": 13.94480037689209, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 18, + "yPos": -37.190887451171878, + "noteFunction": "" + }, + { + "time": 14.368300437927246, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 18, + "yPos": 248.14227294921876, + "noteFunction": "" + }, + { + "time": 25.34480094909668, + "trackIndex": 0, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 32, + "yPos": 97.55938720703125, + "noteFunction": "" + }, + { + "time": 28.244800567626954, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -104.56590270996094, + "noteFunction": "" + }, + { + "time": 28.244800567626954, + "trackIndex": 4, + "color": "red", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -104.56590270996094, + "noteFunction": "" + }, + { + "time": 28.2947998046875, + "trackIndex": 3, + "color": "purple", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -70.87891387939453, + "noteFunction": "" + }, + { + "time": 28.2947998046875, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -70.87891387939453, + "noteFunction": "" + }, + { + "time": 28.2947998046875, + "trackIndex": 1, + "color": "green", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -70.87891387939453, + "noteFunction": "" + }, + { + "time": 28.34480094909668, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -37.190643310546878, + "noteFunction": "" + }, + { + "time": 28.394800186157228, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": -3.503659725189209, + "noteFunction": "" + }, + { + "time": 28.444799423217775, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 30.183326721191408, + "noteFunction": "" + }, + { + "time": 28.494800567626954, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 63.87159729003906, + "noteFunction": "" + }, + { + "time": 28.5447998046875, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 97.55857849121094, + "noteFunction": "" + }, + { + "time": 28.59480094909668, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 131.24685668945313, + "noteFunction": "" + }, + { + "time": 28.644800186157228, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 164.933837890625, + "noteFunction": "" + }, + { + "time": 28.694799423217775, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 198.62081909179688, + "noteFunction": "" + }, + { + "time": 28.744800567626954, + "trackIndex": 4, + "color": "blue", + "type": "tap", + "length": 0.0, + "barNumber": 36, + "yPos": 232.30909729003907, + "noteFunction": "" + }, + { + "time": 40.49480056762695, + "trackIndex": 2, + "color": "yellow", + "type": "tap", + "length": 0.0, + "barNumber": 51, + "yPos": 63.87147521972656, + "noteFunction": "" + } + ], + "enemyList_isEmpty": false, + "colorSegments": [ + { + "enemyID": "kong", + "percentage": 20.0 + }, + { + "enemyID": "jia", + "percentage": 20.0 + }, + { + "enemyID": "bin", + "percentage": 32.099998474121097 + }, + { + "enemyID": "s", + "percentage": 7.900000095367432 + }, + { + "enemyID": "b", + "percentage": 20.0 + } + ], + "is_official": true, + "noteStatistics": [ + { + "colorType": "blue_tap", + "count": 53 + }, + { + "colorType": "green_hold", + "count": 6 + }, + { + "colorType": "purple_tap", + "count": 46 + }, + { + "colorType": "green_tap", + "count": 69 + }, + { + "colorType": "red_tap", + "count": 58 + }, + { + "colorType": "blue_hold", + "count": 7 + }, + { + "colorType": "yellow_tap", + "count": 52 + }, + { + "colorType": "yellow_hold", + "count": 7 + }, + { + "colorType": "red_hold", + "count": 6 + }, + { + "colorType": "purple_hold", + "count": 7 + } + ], + "trackStates": { + "trackFading_active": false, + "red": { + "isOn": false, + "fadeTime": 0.0 + }, + "green": { + "isOn": false, + "fadeTime": 0.0 + }, + "yellow": { + "isOn": false, + "fadeTime": 0.0 + }, + "purple": { + "isOn": false, + "fadeTime": 0.0 + }, + "blue": { + "isOn": false, + "fadeTime": 0.0 + } + } +} \ No newline at end of file diff --git a/Assets/StreamingAssets/exampleSongName_@1.json.meta b/Assets/StreamingAssets/exampleSongName_@1.json.meta new file mode 100644 index 00000000..bf4a8479 --- /dev/null +++ b/Assets/StreamingAssets/exampleSongName_@1.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7b1de74fe81264d4092e27d2191be0d8 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/artworks/Songs_Select/level/F@4x.png.meta b/Assets/artworks/Songs_Select/level/F@4x.png.meta index 08ac8d14..fd606218 100644 --- a/Assets/artworks/Songs_Select/level/F@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/F@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + F@4x_0: 2696126732994276316 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/SS@4x.png.meta b/Assets/artworks/Songs_Select/level/SS@4x.png.meta index 202c3f3c..530b0744 100644 --- a/Assets/artworks/Songs_Select/level/SS@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/SS@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + SS@4x_0: 8145665558145031127 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 B@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 B@4x.png.meta index 08e89e35..6ba88ccb 100644 --- a/Assets/artworks/Songs_Select/level/画板 B@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 B@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F B@4x_0": -3477052224104452790 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 C@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 C@4x.png.meta index 320dcaa2..810d05a0 100644 --- a/Assets/artworks/Songs_Select/level/画板 C@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 C@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F C@4x_0": 753916413009869570 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 D@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 D@4x.png.meta index 6f2e68f6..18cf9f16 100644 --- a/Assets/artworks/Songs_Select/level/画板 D@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 D@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F D@4x_0": 5824227667964995878 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 E@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 E@4x.png.meta index 21c827b5..f0b6384a 100644 --- a/Assets/artworks/Songs_Select/level/画板 E@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 E@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F E@4x_0": 6528632934354270552 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 EASE@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 EASE@4x.png.meta index ac5b5d44..63263cad 100644 --- a/Assets/artworks/Songs_Select/level/画板 EASE@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 EASE@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F EASE@4x_0": -1313005266698724572 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 S@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 S@4x.png.meta index ace491de..c2b8bc9e 100644 --- a/Assets/artworks/Songs_Select/level/画板 S@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 S@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F S@4x_0": -7571068170699483926 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板 UF@4x.png.meta b/Assets/artworks/Songs_Select/level/画板 UF@4x.png.meta index ebc87857..beec6ef1 100644 --- a/Assets/artworks/Songs_Select/level/画板 UF@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板 UF@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677F UF@4x_0": 6470357825098895925 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/Songs_Select/level/画板A@4x.png.meta b/Assets/artworks/Songs_Select/level/画板A@4x.png.meta index cf228134..45ea90cd 100644 --- a/Assets/artworks/Songs_Select/level/画板A@4x.png.meta +++ b/Assets/artworks/Songs_Select/level/画板A@4x.png.meta @@ -147,7 +147,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + "\u753B\u677FA@4x_0": -6973214586806606383 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green.meta b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green.meta new file mode 100644 index 00000000..8fffde0b --- /dev/null +++ b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d47faa2439b1a4e46980d432f8111e54 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本 2.png b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本 2.png new file mode 100644 index 0000000000000000000000000000000000000000..03b9ae5d15904bd4edb2e151f9b14e0e038f04b3 GIT binary patch literal 1342 zcmbW1?LQL;0LQnHwuNjSrtRp?GksJJrK4mY%Qj-xNR-UF=juX=FJ38`q@ghS1IotsQ@XCbI1r@L zho*(iEw$>MD|6XO+)$f^t%I$pCoV}eQp~^aaJkdX2g0z^AaD3#C^i;jgkO@7_YTXL z62p$h4Dd0TQYUmqeBAcKONIT$O5Tbt5kHGt?ir{CAXEJI)yBOF zjzV94`dix8lGK;0 z1;7ZPUxrpVxr9yd;uHE_Bm#p_=!iHjLX&yR15K5jdaqg!$sF47*!E0QC&lAS&7{g? zBU0UVNJ@*asgHN`Wt1Un{d7_g$-KJ52S@9y-R0fFV3`Fd{VBi@A@h7I{Btk==l3|L064&k{lcm>ZE4r z;V{pw3tHlRcw~srlsF1D97_+Mfi#QwoxsdjA!2vEQY&)aaLBa&A)5J9i@tzEdc;L- z!3?99WqxuFv^7x0Bo5Jt3pKynJRe(-ZYopqZ4#kPy7jrVOH`)lqyt7zYuFh4JSN2s2wzo|)CZe1*wIeKMhNA28N zbV@tXv9_8Mmgn{qA;MUygoso?F;TO|R%b*b^l1}}M(T^|&#VN75s}V?J=-7NlK+CO ziBIL%T;jiPimQ{^s-UTHb=B91J%9Ai3uYpoe_wsZ(f=WTXjLZgmQ-F(f=Sp#3skMryT zIw?*-`AbuW`E%p?4=EaJr4eft2Fyce<*QD(j5oRN5HTe$$!+fQ za?_`02eg*#Y)8Yaa*I&;^lI~=qs3j`t4ik8oGGd>PUI&zLZX`4Ebhs^ca5C8%8pRp zyIOzjsCHO8gZFq7pX`?~EZTyM>MaKyod4=FCZ;1^zsp9p^t7qRAZ@Jp-4LTJOJ|uH zTC+eWAYABNTLE8sf|QdHXtcM~-#wL8py^35BT?sC2d=2qeZk$R=`l=;zE`f0c~lC; zi}ea9C-aKgG}r&F?BiyR_o8WSg$d&2C<_-XXd7J(d^5F`kmR+F&LU;`ASmm`Fma{4 zLSdpas2#nT5la;YbWu+A;fz{?OF~u_FwI1<;vgoOCXF$ zv0x_pZh!BxMetMs(kpfB#t7-lN!ax9CdJmo4C)7Ebn{FYeWmZxeX{AoaDwn*e!)n5 whSXjr_8Va9_*@>p=V`k-LNhP+5$jb;PQX5&yw$sd9FMHEi z$+_7lOnFZ)^Kw`%aUm1CvddC!)7hGx{)YSE`+PsoFVBw;B_a%EZRKPI006AfAxP}9 zYnSn|Sh<}1DGG2|mS;nbWdi`KY`+7Py&-)A08II4q<>T%N5#cwj7K?0Do4ZYpeE5x z_J5gG?cTsI6`NR_j+tR|*T@UC&T}B^7vRmnTov^8MY3u?v){~;b-4*w_)sCWc4C}C z#Ec0(`}bV4>oI1{nf5tL!>M6um1^E7sj_q7KKIb;{HD68jU~TL-!MpW9-gx+bSjv- z(eDX4%By%g-&&HvJi|S~rq%}v4z?SIN#t`|T0L4O=k}i-rfA`DYvG{orJ8ZZ3cY~P z-|qXCkaCT_vU3Q&l)aEKP41c$drk>5iIS}$u~$JBFdusu%Kr}g3H~19wiO+ z3K${JhyxakJ2RnAz87I6-3E;55$-5Gz@iMR{D;dT!I;24tJn|i44;`xOyYvMEAqPJ z-k0+Gux!Tag80k5GKa(4oY*q3VMI{n@|HH9RMGp`t&Rs}x+F7P*dsW{Z_E3|j?wr( z$|EJuBLsWXUxl5#yGA%N7PgJ?Pvm}- zPGC{pPiqO*#;+#7Fm&t_{tiX$Q!!)RYU8KU6ohl4Lv6pTE77F$uInTuq0t1%^};4> z3*E9u*rj~)NJ^=}gbRdXt_h%pM~wL>zo+f0i9m1eM943t-s(7DTeaI&=5^t`@ZSI; zf?tkoLYQkG&@7@FM{DC2(&@oLEd4=SkKq&}(EaQBVCsR0=@V12YR{^VR%H2jk2GYQhi>u-iy8tR^ZMdA-*@rnA4 zj`}-MRKNRt#kz{a>Ql2Z?`7eypCMc2ne`I^D{8^7CT1sn0E+6$(Cg{n%ZjB@wFQspt$jY-yl0=ZbMviH6^^fxc@JxLw^rrWnrnrDglL0PJ8 z;2pW`R*rs>meUn$rU(S+)Ie{TcXEQk1_>wMXd}G$n32nZj)e$LHn-x10Z9CV^cA?4 z)xBF`L*W>zCfP=Bm;<#8Ex%^-NbWj+w IKHx;re*l(V2LJ#7 literal 0 HcmV?d00001 diff --git a/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本.png.meta b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本.png.meta new file mode 100644 index 00000000..addc7c2f --- /dev/null +++ b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48 副本.png.meta @@ -0,0 +1,155 @@ +fileFormatVersion: 2 +guid: 0422ec80d408ba544b04f2029092142f +TextureImporter: + internalIDToNameTable: + - first: + 213: -8758525742714370910 + second: "\u753B\u677F 48 \u526F\u672C_0" + 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: 2 + 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: "\u753B\u677F 48 \u526F\u672C_0" + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 169 + height: 49 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2a4456ddd37737680800000000000000 + internalID: -8758525742714370910 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48.png b/Assets/artworks/gamePlay_gamePlay/notes/emptyNotes/Green/画板 48.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec5b2e9e604aac95341a7dc5267ccafbe9b5769 GIT binary patch literal 488 zcmeAS@N?(olHy`uVBq!ia0vp^tAN;$gAGV}T{mI^Qk(@Ik;M!Q+(IDCcZ4<9C0h2`e%t7%{DJXcpi$WLj*<#H_%!psh(^hsHMHH`e!6 zHRE6YG~HMvZ>R46zT!_s-NX|8)~em--=@~@-M8cF`JcT@On7+aYnEO&{FnF1a+lxb zjWg!%zg?VGTfQkr=j@vGYrWf_KdnBNa_(We)^(Y>Wl6DLXP){RcqVs^^xTF2>gRs? z{rvZ}^8#0QUi$uYZk_n`-_~Cye-?ZE(5HdXsg-qbpw^{J)IG!39zJ&ede+Xm_^Haj zx34+xadS=1`FFQh^lS_3JGScZz~!n+rJ7PmAw2f_WRQt zACmrkN}2rq>-jsYX4IV7`TDcp@A?0~cOI*qES5jXZnpcRIP(json); - //Debug.Log("谱面已加载:" + json); + Debug.Log("Ѽأ" + json); - // 在加载后立即调用音符生成 + // ڼغ noteSpawner.LoadBeatmap(beatmap); } else { - //Debug.LogError("文件不存在:" + path); + Debug.LogError("ļڣ" + path); } } public void LoadBeatmap(Beatmap loadedBeatmap) { beatmap = loadedBeatmap; - //Debug.Log("谱面已加载:" + beatmap.title); + Debug.Log("Ѽأ" + beatmap.title); - // 在加载后立即调用音符生成 + // ڼغ noteSpawner.LoadBeatmap(beatmap); } @@ -56,15 +56,15 @@ public class BeatmapManager : MonoBehaviour // { // string json = File.ReadAllText(path); // Beatmap beatmap = JsonUtility.FromJson(json); - // beatmapManager.LoadBeatmap(beatmap); // 使用 LoadBeatmap 方法传递 Beatmap 对象 + // beatmapManager.LoadBeatmap(beatmap); // ʹ LoadBeatmap Beatmap // } // else // { - // Debug.LogError("文件不存在:" + path); + // Debug.LogError("ļڣ" + path); // } //} - // 创建一个示例谱面并保存 + // һʾ沢 //public void CreateSampleBeatmap() //{ // beatmap = new Beatmap @@ -105,7 +105,7 @@ public class BeatmapManager : MonoBehaviour // SaveBeatmap("test_beatmap.json"); //} - // 读取并加载当前谱面到音符生成器 + // ȡصǰ浽 public void LoadBeatmapFromFile() { string path = Application.streamingAssetsPath + "/Emilia_demo.json"; @@ -117,15 +117,15 @@ public class BeatmapManager : MonoBehaviour } else { - //Debug.LogError("谱面文件未找到!"); + Debug.LogError("ļδҵ"); } } - // 在 Start() 方法中初始化 + // Start() гʼ void Start() { - // 这里可以选择在启动时创建一个示例谱面并加载 - //CreateSampleBeatmap(); // 创建并保存一个示例谱面 - LoadBeatmap("Emilia_demo.json"); // 加载并实例化音符 + // ѡʱһʾ沢 + //CreateSampleBeatmap(); // һʾ + LoadBeatmap("Emilia_demo.json"); // زʵ } } diff --git a/Assets/scripts/gamePlay_gameplay/BeatmapManager.cs.meta b/Assets/scripts/gamePlay_gameplay/BeatmapManager.cs.meta index df5f3a02..83444a0f 100644 --- a/Assets/scripts/gamePlay_gameplay/BeatmapManager.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/BeatmapManager.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: c80308880c1feca40bcf476848142e2b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: c80308880c1feca40bcf476848142e2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/GameManager.cs b/Assets/scripts/gamePlay_gameplay/GameManager.cs index 9ab41124..67607c4f 100644 --- a/Assets/scripts/gamePlay_gameplay/GameManager.cs +++ b/Assets/scripts/gamePlay_gameplay/GameManager.cs @@ -1,69 +1,15 @@ using System.IO; -using System.Linq; using UnityEngine; -using static HoldNote; -public enum NoteScore -{ - Perfect, - Good, - Okay, - Miss -} public class GameManager : MonoBehaviour { - public static GameManager Instance { get; private set; } public BeatmapManager beatmapManager; // غ͹ public NoteSpawner noteSpawner; // public AudioSource musicSource; // ֲ - public int CurrentScore { get; private set; } - public int MaxCombo { get; private set; } - public int CurrentCombo { get; private set; } - // ӼƷַ - public void AddScore(NoteScore scoreType) - { - // Ʒ߼ - switch (scoreType) - { - case NoteScore.Perfect: - CurrentScore += 100; - Debug.Log("Perfect! +100"); - break; - case NoteScore.Good: - CurrentScore += 80; - Debug.Log("Good! +80"); - break; - case NoteScore.Okay: - CurrentScore += 50; - Debug.Log("Okay +50"); - break; - case NoteScore.Miss: - CurrentCombo = 0; // ж - Debug.Log("Miss! ж"); - return; // ӷ - } - - // - CurrentCombo++; - if (CurrentCombo > MaxCombo) - MaxCombo = CurrentCombo; - } - private void Awake() - { - if (Instance != null && Instance != this) - { - Destroy(gameObject); - } - else - { - Instance = this; - DontDestroyOnLoad(gameObject); - } - } void Start() { - //Debug.Log("GameManager Start() "); + Debug.Log("GameManager Start() "); // ؼǷΪ if (beatmapManager == null) Debug.LogError("beatmapManager δֵ"); @@ -75,7 +21,7 @@ public class GameManager : MonoBehaviour if (!File.Exists(beatmapFilePath)) { - //Debug.LogError($"ļ: {beatmapFilePath}"); + Debug.LogError($"ļ: {beatmapFilePath}"); return; } @@ -84,26 +30,20 @@ public class GameManager : MonoBehaviour if (beatmap == null) { - //Debug.LogError("ʧܣJSON ʽܴ"); + Debug.LogError("ʧܣJSON ʽܴ"); return; } beatmapManager.LoadBeatmap(beatmap); // ݸ BeatmapManager noteSpawner.LoadBeatmap(beatmap); // ݸ NoteSpawner - // ű if (!string.IsNullOrEmpty(beatmap.musicFile)) { - string musicPath = Path.Combine("song_songIndex/1002001_emilia", Path.GetFileNameWithoutExtension(beatmap.musicFile)); - AudioClip musicClip = Resources.Load(musicPath); - + AudioClip musicClip = Resources.Load(beatmap.musicFile); if (musicClip == null) { - //Debug.LogError($"ļʧܣ·: {musicPath}"); - // гResourcesļƵļڵ - var allAudio = Resources.LoadAll(""); - //Debug.Log("Ƶļ" + string.Join(", ", allAudio.Select(a => a.name))); + Debug.LogError($"ļʧ: {beatmap.musicFile}"); } else { @@ -113,7 +53,7 @@ public class GameManager : MonoBehaviour } else { - //Debug.LogError(" musicFile Ϊգ"); + Debug.LogError(" musicFile Ϊգ"); } } } diff --git a/Assets/scripts/gamePlay_gameplay/GameManager.cs.meta b/Assets/scripts/gamePlay_gameplay/GameManager.cs.meta index 19270cb6..8c89ee63 100644 --- a/Assets/scripts/gamePlay_gameplay/GameManager.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/GameManager.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 0a3cb3ef9478edd4a8b6718a11a0fc3c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 0a3cb3ef9478edd4a8b6718a11a0fc3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/HoldNote.cs b/Assets/scripts/gamePlay_gameplay/HoldNote.cs index 087f44ff..dc0e0452 100644 --- a/Assets/scripts/gamePlay_gameplay/HoldNote.cs +++ b/Assets/scripts/gamePlay_gameplay/HoldNote.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Collections.Generic; using UnityEngine; public enum NoteSegment { None, Start, Middle, End } @@ -7,30 +6,19 @@ public enum NoteSegment { None, Start, Middle, End } [RequireComponent(typeof(HoldNoteController))] public class HoldNote : BaseNote { - [Header("判定容差")] - public float startHitWindow = 0.1f; // 起始段判定窗口 - public float endHitWindow = 0.15f; // 结束段判定窗口 - public float segmentGracePeriod = 0.05f; // 分段间宽限时间 - private KeyCode keyToPress = KeyCode.None; private string noteColor = string.Empty; private string noteID = string.Empty; private NoteSegment segment = NoteSegment.None; - private new float hitTime = 0f; + private float hitTime = 0f; private float releaseTime = 0f; private bool hasReleased = true; private bool hasEnteredLine = false; private Coroutine autoReturnCoroutine; private HoldNoteController controller; - private static Dictionary _holdNoteValidity = new Dictionary(); - - // 新增变量:按键按住检测 - private bool _isKeyHeld = false; - private float _lastKeyPressTime = 0f; - private const float KEY_CHECK_INTERVAL = 0.05f; - private Coroutine _keyCheckCoroutine; + private AnimationController anim; public int id; public int trackIndex; @@ -43,9 +31,16 @@ public class HoldNote : BaseNote public KeyCode key; public string type; // "start", "middle", or "end" + private bool isJudged = false; // 分段判定标记,一旦判定(无论成功失败)就设为true,避免重复判定 + private bool isHoldActive = false; // 长按有效标记:Start段成功判定且按键未松开 + + // 新增变量 + private bool hasBeenHeldFromStart = false; // 进入判定区时是否已按住 (用于辅助判断,但不再直接阻断判定) + private void Awake() { controller = GetComponent(); + anim = GetComponent(); } private void OnEnable() @@ -53,6 +48,25 @@ public class HoldNote : BaseNote ResetState(); } + private void PlayHitAnimation() + { + if (anim != null) + { + // 激活动画效果 GameObject + anim.gameObject.SetActive(true); + anim.PlayDestroyAnimation(noteColor); + + // 延迟禁用动画效果 GameObject,确保动画播放完毕 + StartCoroutine(DelayedDisableAnimation(anim.gameObject, 0.5f)); // 0.5秒后禁用 + } + } + + private IEnumerator DelayedDisableAnimation(GameObject animationObject, float delay) + { + yield return new WaitForSeconds(delay); + animationObject.SetActive(false); + } + public void Setup(int id, int trackIndex, float speed, float time, float delay, bool isEnd, float scheduledEnd, string color, KeyCode key, string type) { @@ -72,123 +86,134 @@ public class HoldNote : BaseNote this.noteColor = color; this.hitTime = time + delay; this.segment = (delay == 0f) ? NoteSegment.Start : - (isEnd ? NoteSegment.End : NoteSegment.Middle); + (isEnd ? NoteSegment.End : NoteSegment.Middle); this.hasEnteredLine = false; this.hasReleased = false; + // 在 Setup 时注册初始状态 JudgeManager.Instance?.RegisterNoteReleased(noteID, false); if (segment == NoteSegment.Start) - JudgeManager.Instance?.RegisterStartJudged(noteID, false); + JudgeManager.Instance?.RegisterStartJudged(noteID, false); // 初始为未判定 if (segment == NoteSegment.End) JudgeManager.Instance?.RegisterScheduledEndTime(noteID, scheduledEndTime); - // 如果是起始段,初始化状态为true - if (type == "start") - { - _holdNoteValidity[id] = true; - } - - // 立即检查有效性 - if (type != "start" && (!_holdNoteValidity.ContainsKey(id) || !_holdNoteValidity[id])) - { - JudgeMiss(); - } - controller?.SetSpeed(speed); controller?.SetSegmentDelay(delay); } private void Update() { - // 检查长音符是否有效 - if (!IsHoldNoteValid()) return; + // 如果当前片段已经判定过,直接返回 + if (isJudged) return; - if (segment == NoteSegment.Start && Input.GetKeyDown(keyToPress)) + // **通用长按状态更新:** + // 只有当isHoldActive为true时才检查松开操作,避免误判 + // 且仅在GetKeyUp时更新状态,避免重复操作 + if (isHoldActive && Input.GetKeyUp(keyToPress)) { - if (hasEnteredLine) + isHoldActive = false; + Debug.Log($"[HoldNote] 按键 {keyToPress} 松开,长按状态失效。NoteID: {noteID}, Segment: {segment}, Type: {type}"); + // 如果是中间段或结束段,且因为松手导致长按失效,可以立即回收 + if (segment == NoteSegment.Middle || segment == NoteSegment.End) + { + // 注意:End段的判定在HandleEnd里,松手只是让isHoldActive为false,不代表End段判定已完成 + // 如果 End 段的判定窗口还没过,松手后 isHoldActive = false,End 段在 OnTriggerExit2D 才会回收 + // 或者在 HandleEnd 之前松手导致长按失效,HandleEnd 内部会判定 Miss + } + } + // 如果按键被按下,且Start段已经判定成功,则激活长按状态 + // 考虑到玩家可能在Start段通过后瞬间松手再按下,这里需要确保只要Start段判定成功且按键按住,isHoldActive就为true + if (JudgeManager.Instance.IsStartJudged(noteID) && Input.GetKey(keyToPress)) + { + isHoldActive = true; + } + + + // Start段判定 + if (segment == NoteSegment.Start && hasEnteredLine) + { + // 在判定窗口内按下按键才触发判定 + if (Input.GetKeyDown(keyToPress)) + { HandleStart(); + isJudged = true; // 无论成功失败都标记为已判定,避免重复尝试 + } + // 如果Start段进入判定区但玩家未按键,且已经错过最佳判定时机,可以考虑Miss并回收 + // 这部分逻辑现在放在 OnTriggerExit2D 里处理更合适 } - else if (segment == NoteSegment.End && Input.GetKeyUp(keyToPress)) + // Middle段判定: + // 只有当头部已判定、且长按有效(按键持续按住),并且已经到达该Middle段的命中时间点时,才认为该Middle段通过。 + // Middle段本身没有独立的按键输入判定,它只是长按的延续。 + else if (segment == NoteSegment.Middle + && JudgeManager.Instance.IsStartJudged(noteID) // 头部必须已判定 + && isHoldActive // 必须处于长按有效状态(按键持续按住) + && !JudgeManager.Instance.HasNoteReleased(noteID)) // 确保End段还未被判定释放 { - HandleEnd(); - } - - // 更新按键状态 - if (segment == NoteSegment.Middle && hasEnteredLine) - { - if (JudgeManager.Instance.IsStartJudged(noteID) && - !JudgeManager.Instance.HasNoteReleased(noteID)) + // Debug.Log($"[HoldNote] Middle段状态检查: Time.time={Time.time:F2}, hitTime={hitTime:F2}, hasEnteredLine={hasEnteredLine}"); + if (Time.time >= hitTime) { - if (!Input.GetKey(keyToPress)) + // 确保它进入了判定线,但在Update中,即使没完全进入,只要时间到了且条件满足,也算通过 + // 但是,我们主要希望它在通过判定线后被回收 + // 因此,Middle段的回收逻辑更多依赖于DelayedAutoReturnCheck或OnTriggerExit2D + if (hasEnteredLine) // 确保已经进入过判定线,防止音符提前消失 { - // 中途松开按键,判定失败 - _holdNoteValidity[id] = false; - JudgeMiss(); + Debug.Log($"[HoldNote] Middle段通过 (持续长按): {noteColor}"); + PlayHitAnimation(); + ReturnToPool(); + isJudged = true; } } } - } - - private bool IsHoldNoteValid() - { - // 起始段总是有效(因为它决定有效性) - if (segment == NoteSegment.Start) return true; - - // 其他段检查有效性 - return _holdNoteValidity.ContainsKey(id) && _holdNoteValidity[id]; - } - - private IEnumerator CheckKeyHold() - { - while (true) + // End段判定 + else if (segment == NoteSegment.End + && JudgeManager.Instance.IsStartJudged(noteID) // 头部必须已判定 + && !JudgeManager.Instance.HasNoteReleased(noteID)) // 确保还未被判定释放 { - if (Input.GetKey(keyToPress)) + // 只有当玩家松开按键时才触发End段判定 + if (Input.GetKeyUp(keyToPress)) { - _isKeyHeld = true; - _lastKeyPressTime = Time.time; + HandleEnd(); + isJudged = true; // 标记为已判定 } - else if (_isKeyHeld && Time.time - _lastKeyPressTime > KEY_CHECK_INTERVAL) + // 如果 End 段已经达到或超过了预定的释放时间 (scheduledEndTime), + // 但玩家仍未松手,且长按状态仍然有效,这可能是玩家按得过长 + // 这种情况应该给予一个差的判定或者Miss + else if (Time.time >= scheduledEndTime + 0.1f && isHoldActive) // 给予一点容错时间 { - // 按键松开超过检查间隔,判定为松开 - _isKeyHeld = false; - if (segment == NoteSegment.Middle || segment == NoteSegment.End) - { - // 中间段或结束段松开按键,标记长音符无效 - _holdNoteValidity[id] = false; - JudgeMiss(); - yield break; // 停止检查 - } + Debug.Log($"[HoldNote] End段超时未松手,判定为Miss: {noteColor}"); + HandleEnd(true); // 传入true表示强制Miss + isJudged = true; } - yield return new WaitForSeconds(KEY_CHECK_INTERVAL); } } private void OnTriggerEnter2D(Collider2D collision) { if (!collision.CompareTag("JudgmentLine")) return; - if (!IsHoldNoteValid()) return; - if (segment == NoteSegment.Start || segment == NoteSegment.Middle) - { - hasEnteredLine = true; - } + hasEnteredLine = true; // 只要进入判定线,就标记 if (segment == NoteSegment.Middle) { - //Debug.Log($"[HoldNote] Middle段进入判定线: color={noteColor}, isStartJudged={JudgeManager.Instance.IsStartJudged(noteID)}, hasReleased={JudgeManager.Instance.HasNoteReleased(noteID)}, isKeyDown={Input.GetKey(keyToPress)}"); + // 进入判定区时记录是否已按住 + hasBeenHeldFromStart = Input.GetKey(keyToPress); + Debug.Log($"[HoldNote] Middle段进入判定线: color={noteColor}, isStartJudged={JudgeManager.Instance.IsStartJudged(noteID)}, hasReleased={JudgeManager.Instance.HasNoteReleased(noteID)}, isKeyHeld={Input.GetKey(keyToPress)}, hasBeenHeldFromStart={hasBeenHeldFromStart}"); if (autoReturnCoroutine != null) StopCoroutine(autoReturnCoroutine); - autoReturnCoroutine = StartCoroutine(DelayedAutoReturnCheck()); + // Middle段的延迟回收主要确保即使按住也能在适当时间回收 + // 重新思考这里的必要性,可能让Update和OnTriggerExit2D处理更直接 + // 暂时移除这里的 DelayedAutoReturnCheck,让 Update 和 OnTriggerExit2D 主导 Middle 段的生命周期 + // autoReturnCoroutine = StartCoroutine(DelayedAutoReturnCheck()); } - - if (segment == NoteSegment.End) + else if (segment == NoteSegment.End) { if (autoReturnCoroutine != null) StopCoroutine(autoReturnCoroutine); + // End段的延迟回收主要用于处理玩家是否松手,以及超时回收 autoReturnCoroutine = StartCoroutine(DelayedAutoReturnCheck()); } } @@ -196,27 +221,45 @@ public class HoldNote : BaseNote private void OnTriggerExit2D(Collider2D collision) { if (!collision.CompareTag("JudgmentLine")) return; - if (!IsHoldNoteValid()) return; + // Start段离开判定线时如果未被判定,则视为Miss并回收 if (segment == NoteSegment.Start) { if (!JudgeManager.Instance.IsStartJudged(noteID)) { + Debug.Log($"[HoldNote] Start段离开判定线未判定,强制回收 (Miss): {noteColor}"); + // 可以触发一个Miss判定 + // JudgeManager.Instance.RecordMiss(noteID); ReturnToPool(); } + // 如果Start段已判定,那么它会通过DelayedReturn被回收,这里不做额外处理 } - if (segment == NoteSegment.Middle) + // Middle段离开判定线时,如果头部未判定,或者长按已经失效(松手),则回收 + else if (segment == NoteSegment.Middle) // 这里修正了拼写错误 { - if (!JudgeManager.Instance.IsStartJudged(noteID) || - JudgeManager.Instance.HasNoteReleased(noteID)) - { - //Debug.Log($"[HoldNote] Middle段离开判定线强制回收: {noteColor}"); - ReturnToPool(); - } + // 无论Start段是否判定,如果Middle段离开了判定线,就应该回收 + // 因为它已经完成了它的“通过”或者“错过”的职责 + Debug.Log($"[HoldNote] Middle段离开判定线强制回收: {noteColor}"); + ReturnToPool(); } + // End段离开判定线时,如果头部未判定,或者长按已经失效,或者 End 段已经完成判定,则回收 else if (segment == NoteSegment.End) { - if (!JudgeManager.Instance.IsStartJudged(noteID) || JudgeManager.Instance.HasNoteReleased(noteID)) + if (!isJudged) // 如果End段还没有被判定 + { + // 如果头部没判,或者长按中断,或者玩家按得过久(已经过了scheduledEndTime很多了) + if (!JudgeManager.Instance.IsStartJudged(noteID) || !isHoldActive || Time.time > scheduledEndTime + 0.15f) + { + Debug.Log($"[HoldNote] End段离开判定线强制回收 (头部未判定或长按中断或超时): {noteColor}"); + // 可以在这里强制一个Miss判定,如果之前没触发过 + if (!JudgeManager.Instance.HasNoteReleased(noteID)) // 确保没有重复判定 + { + HandleEnd(true); // 传入true表示强制Miss + } + ReturnToPool(); + } + } + else // 如果End段已经被判定过了,直接回收 { ReturnToPool(); } @@ -225,139 +268,110 @@ public class HoldNote : BaseNote private IEnumerator DelayedAutoReturnCheck() { + // 这里的 DelayedAutoReturnCheck 主要是针对 End 段的超时未松手检查 + // 或者 Start 段的延迟补判(这部分已经移到 Update 和 HandleStart) yield return null; - if (!IsHoldNoteValid()) yield break; - - bool isStartJudgedBefore = JudgeManager.Instance.IsStartJudged(noteID); - bool isKeyHeldNow = Input.GetKey(keyToPress); - - //Debug.Log($"[HoldNote] 延迟检查开始: noteID={noteID}, color={noteColor}, isStartJudged={isStartJudgedBefore}, isKeyHeld={isKeyHeldNow}"); - - if (!isStartJudgedBefore && isKeyHeldNow) + if (segment == NoteSegment.End) { - //Debug.Log($"[HoldNote] 延迟回补 Start 判定触发: {noteColor}"); - HandleStart(); - } - - bool isStartJudged = JudgeManager.Instance.IsStartJudged(noteID); - bool hasReleased = JudgeManager.Instance.HasNoteReleased(noteID); - bool isKeyHeld = Input.GetKey(keyToPress); - - //Debug.Log($"[HoldNote] 延迟确认状态: isStartJudged={isStartJudged}, hasReleased={hasReleased}, isKeyHeld={isKeyHeld}"); - - if (segment == NoteSegment.Middle && isStartJudged && isKeyHeld) - { - float waitTime = Mathf.Max(0f, hitTime - Time.time); - //Debug.Log($"[HoldNote] Middle段通过延迟确认,准备等待到 hitTime 回收: {noteColor}, 剩余时间={waitTime:F2}s"); - - yield return new WaitForSeconds(waitTime); - - if (Input.GetKey(keyToPress) && !JudgeManager.Instance.HasNoteReleased(noteID)) + // 在这里等待,看玩家是否在 scheduledEndTime 之前松手 + // 如果到达 scheduledEndTime 玩家仍未松手,且长按有效,则继续等待 + // 如果玩家按得过长,可以在 Update 中触发 Miss 判定 + float timeToWait = Mathf.Max(0f, scheduledEndTime - Time.time); + if (timeToWait > 0f) { - //Debug.Log($"[HoldNote] Middle段在 hitTime 达成条件,回收: {noteColor}"); - ReturnToPool(); + yield return new WaitForSeconds(timeToWait); } - else + + // 到达 scheduledEndTime 后再次检查 + // 如果此时玩家仍在按住,并且 Start 段已判定,但 End 段还没被判定释放 + // 说明玩家按得太久,判定为 Miss + if (!isJudged && JudgeManager.Instance.IsStartJudged(noteID) && Input.GetKey(keyToPress)) { - //Debug.Log($"[HoldNote] Middle段在 hitTime 条件不符,不回收: {noteColor}"); + Debug.Log($"[HoldNote] DelayedAutoReturnCheck (End段) 判定:玩家按得过长,Miss! {noteColor}"); + HandleEnd(true); // 强制 Miss } - } - else if (segment == NoteSegment.End && !hasReleased) - { - //Debug.Log($"[HoldNote] End段延迟检查后仍未释放: {noteColor}"); - } - else - { - //Debug.Log($"[HoldNote] DelayedAutoReturnCheck 无需处理: segment={segment}, color={noteColor}"); + // 无论如何,如果 End 段已经过去了,但还没回收,就回收 + if (!gameObject.activeSelf) + { + yield break; // 修正!使用 yield break 来结束协程 + } + ReturnToPool(); } } private void HandleStart() { - if (!IsHoldNoteValid()) return; - float pressTime = Time.time; float offset = Mathf.Abs(pressTime - hitTime); - if (offset < startHitWindow) + if (offset < 0.1f) // 判定成功 { - //Debug.Log($"[HoldNote] START判定成功(偏差={offset:F2}秒): {noteColor}"); + Debug.Log($"[HoldNote] START判定成功(偏差={offset:F2}秒): {noteColor}"); JudgeManager.Instance.RegisterStartJudged(noteID, true); - JudgeManager.Instance.RegisterHoldNoteStart(noteID, Time.time); - - // 开始按键按住检测 - _isKeyHeld = true; - _lastKeyPressTime = Time.time; - if (_keyCheckCoroutine != null) - StopCoroutine(_keyCheckCoroutine); - _keyCheckCoroutine = StartCoroutine(CheckKeyHold()); - - hasEnteredLine = true; - StartCoroutine(DelayedReturn()); + isHoldActive = true; // 成功判定Start,长按状态激活 + PlayHitAnimation(); } else { - _holdNoteValidity[id] = false; - //Debug.Log($"[HoldNote] START Miss(偏差={offset:F2}秒,窗口={startHitWindow:F2}秒): {noteColor}"); - JudgeMiss(); + Debug.Log($"[HoldNote] START Miss(偏差={offset:F2}秒): {noteColor}"); + JudgeManager.Instance.RegisterStartJudged(noteID, false); // 明确标记未判定 + isHoldActive = false; // Start Miss,长按状态不激活 } - } - private void JudgeMiss() - { - // 执行Miss判定逻辑 - //Debug.Log($"[HoldNote] 判定为Miss: {noteColor}"); - ReturnToPool(); + // Start段判定后立即回收,因为它的视觉部分可能只需要短暂显示 + StartCoroutine(DelayedReturn()); } private IEnumerator DelayedReturn() { - yield return new WaitForSeconds(0.05f); - ReturnToPool(); + yield return new WaitForSeconds(0.05f); // 短暂延迟,确保视觉效果或数据更新 + if (gameObject.activeSelf) // 确保对象还活跃,防止重复回收 + { + ReturnToPool(); + } } - private void HandleEnd() + // 重载 HandleEnd 方法,增加一个强制Miss的参数 + private void HandleEnd(bool forceMiss = false) { - if (!IsHoldNoteValid()) return; - if (!JudgeManager.Instance.IsStartJudged(noteID)) - { - Debug.Log($"[HoldNote] 结束段判定失败:起始段未正确判定"); - return; - } - releaseTime = Time.time; - hasReleased = true; - float diff = Mathf.Abs(releaseTime - scheduledEndTime); - string result = "Miss"; + hasReleased = true; // 标记此音符已被释放 - if (diff < endHitWindow) + JudgeManager.Instance.RegisterNoteReleased(noteID, true); // 在 JudgeManager 中注册释放 + + string result; + + // 如果强制Miss,或者头部未判定,或者长按已经中断,则直接判定为Miss + if (forceMiss || !JudgeManager.Instance.IsStartJudged(noteID) || !isHoldActive) { - result = "Perfect"; - JudgeManager.Instance.RegisterNoteReleased(noteID, true); - ReturnToPool(); + result = "Miss"; + Debug.LogWarning($"[HoldNote] END判定失败({noteColor}):{(forceMiss ? "强制Miss" : (!JudgeManager.Instance.IsStartJudged(noteID) ? "头部未判定" : "长按中断"))}"); } - else if (diff < endHitWindow * 2f) + else { - result = "Good"; - JudgeManager.Instance.RegisterNoteReleased(noteID, true); - ReturnToPool(); + float diff = Mathf.Abs(releaseTime - scheduledEndTime); + // End段的判定规则 + if (diff <= 0.05f) // 更严格的完美判定窗口 + { + result = "Perfect"; + } + else if (diff < 0.15f) // 适当放宽的Great判定 + { + result = "Great"; + } + else if (diff < 0.3f) // 再次放宽的Good判定 + { + result = "Good"; + } + else + { + result = "Bad"; // 更大的偏差可能视为Bad或Miss + } } Debug.Log($"[HoldNote] END判定结果: {noteColor} {result} (release={releaseTime:F2}, target={scheduledEndTime:F2})"); - } - - private void OnTriggerStay2D(Collider2D collision) - { - if (!collision.CompareTag("JudgmentLine")) return; - if (!IsHoldNoteValid()) return; - - if (segment == NoteSegment.Middle && - JudgeManager.Instance.IsStartJudged(noteID) && - Input.GetKey(keyToPress)) - { - hasEnteredLine = true; - } + ReturnToPool(); // 判定后回收 } private void OnDisable() @@ -368,21 +382,27 @@ public class HoldNote : BaseNote autoReturnCoroutine = null; } - if (_keyCheckCoroutine != null) - { - StopCoroutine(_keyCheckCoroutine); - _keyCheckCoroutine = null; - } - + // OnDisable时对End段的补偿处理: + // 如果是End段,且尚未被判定,且Start段已判定,但此时按键已经松开 (通过 !Input.GetKey(keyToPress) 判断) + // 这意味着玩家在离开判定区或因其他原因导致 OnDisable 时松手,但未触发正常的 HandleEnd if (segment == NoteSegment.End && - !hasReleased && - !JudgeManager.Instance.HasNoteReleased(noteID) && - keyToPress != KeyCode.None && - !Input.GetKey(keyToPress)) + !isJudged && // 尚未判定 + JudgeManager.Instance.IsStartJudged(noteID)) // 头部已判定 { - hasReleased = true; - JudgeManager.Instance.RegisterNoteReleased(noteID, true); - //Debug.Log($"[HoldNote] OnDisable补偿KeyUp: {noteColor}"); + // 如果按键已经松开,或者长按状态已经失效 (可能因为松开过快) + if (!Input.GetKey(keyToPress) || !isHoldActive) + { + Debug.Log($"[HoldNote] OnDisable补偿End段Miss判定: {noteColor}"); + HandleEnd(true); // 强制Miss + isJudged = true; // 标记已判定 + } + else if (Input.GetKey(keyToPress)) + { + // 如果End段离开了判定区,但是玩家还在按住,这属于按得过长 + Debug.Log($"[HoldNote] OnDisable:End段在离开判定区时玩家仍未松手,判定为Miss: {noteColor}"); + HandleEnd(true); // 强制Miss + isJudged = true; + } } controller?.StopMovement(); @@ -390,11 +410,11 @@ public class HoldNote : BaseNote private void ReturnToPool() { - if (!gameObject.activeSelf) return; + if (!gameObject.activeSelf) return; // 再次检查以防止对象已被禁用 if (segment == NoteSegment.Start && !hasEnteredLine) { - //Debug.LogWarning($"[HoldNote] 阻止回收尚未进入判定线的 Start段: {noteColor}"); + Debug.LogWarning($"[HoldNote] 阻止回收尚未进入判定线的 Start段: {noteColor}"); return; } @@ -416,8 +436,10 @@ public class HoldNote : BaseNote hitTime = 0f; scheduledEndTime = 0f; hasEnteredLine = false; - _isKeyHeld = false; - _lastKeyPressTime = 0f; + isJudged = false; + isHoldActive = false; // 重置长按标记 + hasBeenHeldFromStart = false; // 重置 + // canJudgeThisSegment = false; // 此变量已被移除或不再关键 if (autoReturnCoroutine != null) { @@ -425,20 +447,6 @@ public class HoldNote : BaseNote autoReturnCoroutine = null; } - if (_keyCheckCoroutine != null) - { - StopCoroutine(_keyCheckCoroutine); - _keyCheckCoroutine = null; - } - controller?.StopMovement(); } - - private void OnDestroy() - { - if (segment == NoteSegment.End && _holdNoteValidity.ContainsKey(id)) - { - _holdNoteValidity.Remove(id); - } - } -} +} \ No newline at end of file diff --git a/Assets/scripts/gamePlay_gameplay/HoldNote.cs.meta b/Assets/scripts/gamePlay_gameplay/HoldNote.cs.meta index 38a8e0e3..54632f1b 100644 --- a/Assets/scripts/gamePlay_gameplay/HoldNote.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/HoldNote.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 86977693d5a2d364bb086303f60ca1b3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 86977693d5a2d364bb086303f60ca1b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/InputManager.cs b/Assets/scripts/gamePlay_gameplay/InputManager.cs index 0174741e..8111eb85 100644 --- a/Assets/scripts/gamePlay_gameplay/InputManager.cs +++ b/Assets/scripts/gamePlay_gameplay/InputManager.cs @@ -6,15 +6,8 @@ public class InputManager : MonoBehaviour public static event Action OnKeyPressed; public static event Action OnKeyReleased; - // 洢ǰ֡аµİ - private KeyCode[] pressedKeysThisFrame = new KeyCode[5]; - private int pressedKeyCount = 0; - private void Update() { - pressedKeyCount = 0; - - // пܵİ foreach (string color in new string[] { "red", "green", "yellow", "purple", "blue" }) { KeyCode key = KeyBindingManager.GetKeyForColor(color); @@ -22,31 +15,12 @@ public class InputManager : MonoBehaviour if (Input.GetKeyDown(key)) { - // ¼ǰ֡µа - pressedKeysThisFrame[pressedKeyCount++] = key; OnKeyPressed?.Invoke(key); + // JudgeManager ͳһж + JudgeManager.Instance.JudgeEarliestNote(key); } if (Input.GetKeyUp(key)) - { OnKeyReleased?.Invoke(key); - } - } - - // ͬʱ - if (pressedKeyCount > 1) - { - HandleMultiKeyPress(); } } - - private void HandleMultiKeyPress() - { - // Եǰ֡аµİд - for (int i = 0; i < pressedKeyCount; i++) - { - KeyCode key = pressedKeysThisFrame[i]; - // JudgeManager ͳһж϶Ӧ - JudgeManager.Instance.JudgeEarliestNote(key); - } - } -} \ No newline at end of file +} diff --git a/Assets/scripts/gamePlay_gameplay/InputManager.cs.meta b/Assets/scripts/gamePlay_gameplay/InputManager.cs.meta index 657d2c78..f2c0bbfa 100644 --- a/Assets/scripts/gamePlay_gameplay/InputManager.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/InputManager.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: b2c4f957042317641bf529c141c39b91 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: b2c4f957042317641bf529c141c39b91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/JudgeManager.cs b/Assets/scripts/gamePlay_gameplay/JudgeManager.cs index 03a81bf8..fe9a404d 100644 --- a/Assets/scripts/gamePlay_gameplay/JudgeManager.cs +++ b/Assets/scripts/gamePlay_gameplay/JudgeManager.cs @@ -8,42 +8,9 @@ public class JudgeManager : MonoBehaviour private Dictionary> judgeQueues = new Dictionary>(); private Dictionary startJudgedNotes = new Dictionary(); private Dictionary releasedNotes = new Dictionary(); + // ¼ End ε scheduledEndTimeֹ End պȻж private Dictionary noteEndTimes = new Dictionary(); - private Dictionary _holdNoteStartTimes = new Dictionary(); - // 长音符状态管理 - private Dictionary _holdNoteValidity = new Dictionary(); - private Dictionary _holdNoteKeyHeld = new Dictionary(); // 新增:记录按键按住状态 - private Dictionary> multiKeyJudgeQueues = new Dictionary>(); - - - - public void RegisterNoteForMultiKey(KeyCode key, Note note) - { - if (!multiKeyJudgeQueues.ContainsKey(key)) - multiKeyJudgeQueues[key] = new List(); - - if (!multiKeyJudgeQueues[key].Contains(note)) - { - multiKeyJudgeQueues[key].Add(note); - } - } - - public void JudgeAllNotesForMultiKey(KeyCode key) - { - if (multiKeyJudgeQueues.ContainsKey(key)) - { - // 对同一按键的所有音符进行判定 - foreach (var note in multiKeyJudgeQueues[key]) - { - if (note != null && !note.IsJudged()) - { - note.Judge(); - } - } - multiKeyJudgeQueues[key].Clear(); - } - } private void Awake() { @@ -58,68 +25,25 @@ public class JudgeManager : MonoBehaviour } } - #region 长音符状态管理 - public bool IsHoldNoteValid(int holdNoteId) + /// + /// ¼ijɫij End ε scheduledEndTime + /// + public void RegisterScheduledEndTime(string noteColor, float endTime) { - return _holdNoteValidity.ContainsKey(holdNoteId) && _holdNoteValidity[holdNoteId]; + noteEndTimes[noteColor] = endTime; } - public void SetHoldNoteValidity(int holdNoteId, bool isValid) + /// + /// ȡijɫ End ε scheduledEndTime + /// + public float GetScheduledEndTime(string noteColor) { - _holdNoteValidity[holdNoteId] = isValid; - //Debug.Log($"设置长音符有效性: ID={holdNoteId}, Valid={isValid}"); + return noteEndTimes.ContainsKey(noteColor) ? noteEndTimes[noteColor] : 0f; } - public void RemoveHoldNoteValidity(int holdNoteId) - { - if (_holdNoteValidity.ContainsKey(holdNoteId)) - { - _holdNoteValidity.Remove(holdNoteId); - } - } - - // 新增:注册/更新按键按住状态 - public void RegisterHoldNoteKeyHeld(int holdNoteId, bool isHeld) - { - _holdNoteKeyHeld[holdNoteId] = isHeld; - } - - // 新增:检查按键是否按住 - public bool IsHoldNoteKeyHeld(int holdNoteId) - { - return _holdNoteKeyHeld.ContainsKey(holdNoteId) && _holdNoteKeyHeld[holdNoteId]; - } - #endregion - - #region 长音符时间记录 - public void RegisterScheduledEndTime(string noteId, float endTime) - { - noteEndTimes[noteId] = endTime; - } - - public float GetScheduledEndTime(string noteId) - { - return noteEndTimes.ContainsKey(noteId) ? noteEndTimes[noteId] : 0f; - } - - public void RegisterHoldNoteStart(string noteId, float startTime) - { - _holdNoteStartTimes[noteId] = startTime; - //Debug.Log($"注册长音符开始: ID={noteId}, Time={startTime}"); - } - - public bool IsHoldNoteActive(string noteId) - { - return _holdNoteStartTimes.ContainsKey(noteId) && - (Time.time - _holdNoteStartTimes[noteId]) < 5f; - } - #endregion - - #region 音符判定状态 public void RegisterStartJudged(string noteID, bool state) { startJudgedNotes[noteID] = state; - //Debug.Log($"[JudgeManager] RegisterStartJudged: {noteID} = {state}"); } public bool IsStartJudged(string noteID) @@ -130,16 +54,17 @@ public class JudgeManager : MonoBehaviour public void RegisterNoteReleased(string noteID, bool state) { releasedNotes[noteID] = state; - //Debug.Log($"[JudgeManager] RegisterNoteReleased: {noteID} = {state}"); + Debug.Log($"[JudgeManager] RegisterNoteReleased: {noteID} = {state}"); } public bool HasNoteReleased(string noteID) { return releasedNotes.ContainsKey(noteID) && releasedNotes[noteID]; } - #endregion - #region 短音符判定 + /// + /// жʱ + /// public void RegisterNote(KeyCode key, Note note) { if (!judgeQueues.ContainsKey(key)) @@ -151,6 +76,9 @@ public class JudgeManager : MonoBehaviour } } + /// + /// 뿪жʱ + /// public void UnregisterNote(KeyCode key, Note note) { if (!judgeQueues.ContainsKey(key)) return; @@ -163,34 +91,32 @@ public class JudgeManager : MonoBehaviour { newQueue.Enqueue(n); } - else if (!n.IsJudged()) + else { - n.JudgeMiss(); + // **δж򴥷 Miss** + if (!n.IsJudged()) + { + n.JudgeMiss(); + } } } judgeQueues[key] = newQueue; } + /// + /// ʱж + /// public void JudgeEarliestNote(KeyCode key) { if (judgeQueues.ContainsKey(key) && judgeQueues[key].Count > 0) { - Note note = judgeQueues[key].Dequeue(); + Note note = judgeQueues[key].Dequeue(); // ֻȡ if (note != null && !note.IsJudged()) { note.Judge(); } } } - #endregion - #region 重置管理 - public void ResetAllHoldNotes() - { - _holdNoteValidity.Clear(); - _holdNoteStartTimes.Clear(); - _holdNoteKeyHeld.Clear(); - //Debug.Log("重置所有长音符状态"); - } - #endregion -} + +} \ No newline at end of file diff --git a/Assets/scripts/gamePlay_gameplay/JudgeManager.cs.meta b/Assets/scripts/gamePlay_gameplay/JudgeManager.cs.meta index ee590462..4c23de65 100644 --- a/Assets/scripts/gamePlay_gameplay/JudgeManager.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/JudgeManager.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: e726455158177b3499eb8f0910c54e30 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: e726455158177b3499eb8f0910c54e30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs b/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs index 9630db24..e7a74e89 100644 --- a/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs +++ b/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs @@ -7,7 +7,7 @@ public class KeyBindingManager : MonoBehaviour private void Awake() { - //Debug.Log("KeyBindingManager Awake() 被调用,开始加载按键映射..."); + Debug.Log("KeyBindingManager Awake() ãʼذӳ..."); if (keyBindings.Count == 0) { @@ -15,18 +15,18 @@ public class KeyBindingManager : MonoBehaviour } } - /// 获取颜色对应的按键 + /// ȡɫӦİ public static KeyCode GetKeyForColor(string color) { if (keyBindings.TryGetValue(color.ToLower(), out KeyCode key)) { return key; } - //Debug.LogError($"未找到颜色 {color} 对应的按键!请检查 KeyBindingManager 是否正确初始化。"); + Debug.LogError($"δҵɫ {color} Ӧİ KeyBindingManager Ƿȷʼ"); return KeyCode.None; } - /// 修改按键绑定 + /// ޸İ public static void ChangeKeyBinding(string color, KeyCode newKey) { if (keyBindings.ContainsKey(color.ToLower())) @@ -41,7 +41,7 @@ public class KeyBindingManager : MonoBehaviour SaveKeyBindings(); } - /// 存储按键绑定到 `PlayerPrefs` + /// 洢󶨵 `PlayerPrefs` private static void SaveKeyBindings() { foreach (var kvp in keyBindings) @@ -51,7 +51,7 @@ public class KeyBindingManager : MonoBehaviour PlayerPrefs.Save(); } - /// 从 `PlayerPrefs` 加载按键绑定 + /// `PlayerPrefs` ذ private static void LoadKeyBindings() { string[] colors = { "red", "green", "yellow", "purple", "blue" }; @@ -69,6 +69,6 @@ public class KeyBindingManager : MonoBehaviour } } - //Debug.Log("KeyBindings 初始化成功:" + string.Join(", ", keyBindings)); + Debug.Log("KeyBindings ʼɹ" + string.Join(", ", keyBindings)); } } diff --git a/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs.meta b/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs.meta index 3229b8f2..56801a7f 100644 --- a/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/KeyBindingManager.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 2639b2e07c4995842bdbe955d9fb6bfb -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 2639b2e07c4995842bdbe955d9fb6bfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs b/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs index 7f8d93d6..f50b3f87 100644 --- a/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs +++ b/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs @@ -59,28 +59,28 @@ public class Notes : MonoBehaviour private void JudgePerfect() { - //Debug.Log($"Track {trackIndex}: Perfect!"); + Debug.Log($"Track {trackIndex}: Perfect!"); isHit = true; Destroy(gameObject); } private void JudgeGreat() { - //Debug.Log($"Track {trackIndex}: Great!"); + Debug.Log($"Track {trackIndex}: Great!"); isHit = true; Destroy(gameObject); } private void JudgeGood() { - //Debug.Log($"Track {trackIndex}: Good!"); + Debug.Log($"Track {trackIndex}: Good!"); isHit = true; Destroy(gameObject); } private void JudgeMiss() { - //Debug.Log($"Track {trackIndex}: Miss!"); + Debug.Log($"Track {trackIndex}: Miss!"); isHit = true; Destroy(gameObject); } diff --git a/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs.meta b/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs.meta index 16e7eb0e..657ebdbf 100644 --- a/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/NewBehaviourScript.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 8d8062cc45ed8f84da8460fcd2964b77 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 8d8062cc45ed8f84da8460fcd2964b77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/Note.cs b/Assets/scripts/gamePlay_gameplay/Note.cs index 5e1e4b9c..d02a94cc 100644 --- a/Assets/scripts/gamePlay_gameplay/Note.cs +++ b/Assets/scripts/gamePlay_gameplay/Note.cs @@ -28,15 +28,12 @@ public class Note : BaseNote controller.SetSpeed(speed); } - // ͬʱעᵽͨкͶ InputManager.OnKeyPressed += HandlePress; - JudgeManager.Instance.RegisterNoteForMultiKey(key, this); } private void OnDestroy() { InputManager.OnKeyPressed -= HandlePress; - JudgeManager.Instance?.UnregisterNote(keyToPress, this); } private void HandlePress(KeyCode key) @@ -49,15 +46,15 @@ public class Note : BaseNote if (timeDifference <= 0.08f) { - //Debug.Log($" {keyToPress}: Perfect"); + Debug.Log($" {keyToPress}: Perfect"); } else if (timeDifference <= 0.15f) { - //Debug.Log($" {keyToPress}: Great"); + Debug.Log($" {keyToPress}: Great"); } else { - //Debug.Log($" {keyToPress} Miss"); + Debug.Log($" {keyToPress} Miss"); JudgeMiss(); return; } @@ -84,7 +81,7 @@ public class Note : BaseNote ReturnToPool(); if (anim !=null) { - //Debug.Log("ִ"); + Debug.Log("ִ"); anim.PlayDestroyAnimation(noteColor); } @@ -94,7 +91,7 @@ public class Note : BaseNote { if (isJudged) return; isJudged = true; - //Debug.Log($" {keyToPress} Miss"); + Debug.Log($" {keyToPress} Miss"); ReturnToPool(); } diff --git a/Assets/scripts/gamePlay_gameplay/Note.cs.meta b/Assets/scripts/gamePlay_gameplay/Note.cs.meta index c72e2d73..8dd5dca8 100644 --- a/Assets/scripts/gamePlay_gameplay/Note.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/Note.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: a7d5a4ca6fc6b784d89e910ff90c2c7a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: a7d5a4ca6fc6b784d89e910ff90c2c7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/NoteController.cs b/Assets/scripts/gamePlay_gameplay/NoteController.cs index 30fc3e8d..df0149ca 100644 --- a/Assets/scripts/gamePlay_gameplay/NoteController.cs +++ b/Assets/scripts/gamePlay_gameplay/NoteController.cs @@ -5,7 +5,7 @@ public class NoteController : MonoBehaviour { private float speed; private bool isMoving = true; - private bool isInJudgeZone = false; // 判定区域标记 + private bool isInJudgeZone = false; // ж private ParticleSystem hitEffect; private Note linkedNote; @@ -59,7 +59,7 @@ public class NoteController : MonoBehaviour } } - // 将 OnTriggerEnter2D 和 OnTriggerExit2D 挂载在 Controller 上 + // OnTriggerEnter2D OnTriggerExit2D Controller private void OnTriggerEnter2D(Collider2D collision) { @@ -92,7 +92,7 @@ public class NoteController : MonoBehaviour /// - /// 供 Note 查询是否处于判定区域 + /// Note ѯǷж /// public bool IsInJudgeZone() { diff --git a/Assets/scripts/gamePlay_gameplay/NotePool.cs b/Assets/scripts/gamePlay_gameplay/NotePool.cs index f0d486df..28bc643f 100644 --- a/Assets/scripts/gamePlay_gameplay/NotePool.cs +++ b/Assets/scripts/gamePlay_gameplay/NotePool.cs @@ -68,7 +68,7 @@ public class NotePool : MonoBehaviour } else { - //Debug.LogWarning("µ"); + Debug.LogWarning("µ"); GameObject obj = Instantiate(prefab); obj.SetActive(true); return obj; @@ -86,11 +86,11 @@ public class NotePool : MonoBehaviour if (pool.Count < maxPoolSize) { pool.Push(obj); - //Debug.Log($"ѹ黹{obj.name}ǰ{pool.Count}"); + Debug.Log($"ѹ黹{obj.name}ǰ{pool.Count}"); } else { - //Debug.LogWarning("޷黹"); + Debug.LogWarning("޷黹"); } } } @@ -128,18 +128,12 @@ public class NotePool : MonoBehaviour public void ReturnNote(GameObject note, string color) { - Note noteComponent = note.GetComponent(); - if (noteComponent != null) + + NoteController noteScript = note.GetComponent(); + if (noteScript != null) { - JudgeManager.Instance?.UnregisterNote(noteComponent.GetKey(), noteComponent); + noteScript.ResetState(); } - - NoteController noteController = note.GetComponent(); - if (noteController != null) - { - noteController.ResetState(); - } - ReturnObjectToPool(notePools[GetColorIndexFromName(color)], note); } @@ -147,7 +141,7 @@ public class NotePool : MonoBehaviour { if (string.IsNullOrEmpty(color)) { - //Debug.LogWarning($" 黹 StartNote ʱ color Ϊգ: {startNote.name}"); + Debug.LogWarning($" 黹 StartNote ʱ color Ϊգ: {startNote.name}"); return; } @@ -164,7 +158,7 @@ public class NotePool : MonoBehaviour { if (string.IsNullOrEmpty(color)) { - //Debug.LogWarning($" 黹 HoldNoteSegment ʱ color Ϊգ: {holdNote.name}"); + Debug.LogWarning($" 黹 HoldNoteSegment ʱ color Ϊգ: {holdNote.name}"); return; } @@ -189,7 +183,7 @@ public class NotePool : MonoBehaviour case "purple": return 3; case "blue": return 4; default: - //Debug.LogError($"δʶɫ: {colorName}Ĭʹúɫ"); + Debug.LogError($"δʶɫ: {colorName}Ĭʹúɫ"); return 0; } } diff --git a/Assets/scripts/gamePlay_gameplay/NotePool.cs.meta b/Assets/scripts/gamePlay_gameplay/NotePool.cs.meta index 1ba825c7..90ed8907 100644 --- a/Assets/scripts/gamePlay_gameplay/NotePool.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/NotePool.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 9f4db5764af5850449f3b6314af7fb46 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 9f4db5764af5850449f3b6314af7fb46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs index 1de96132..0f909f47 100644 --- a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs +++ b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs @@ -1,5 +1,7 @@ using UnityEngine; using System.Collections; +using Unity.VisualScripting; +using System.Runtime.InteropServices.WindowsRuntime; using TMPro; public class NoteSpawner : MonoBehaviour @@ -18,19 +20,11 @@ public class NoteSpawner : MonoBehaviour public float spawnOffset = 0f; // 生成音符时的时间偏移量 public float bpm; - private HoldNote _holdNoteComponentCache; // 缓存HoldNote组件 private Beatmap beatmap; private float startTime; // 存储歌曲开始时间 private bool isSpawning = false; - private void Awake() - { - // 初始化HoldNote组件缓存 - if (holdNoteStartPrefabs != null && holdNoteStartPrefabs.Length > 0) - { - _holdNoteComponentCache = holdNoteStartPrefabs[0].GetComponent(); - } - } + private static int holdNoteIdCounter = 0; // 全局唯一长音符 ID 计数器 public void LoadBeatmap(Beatmap loadedBeatmap) { @@ -40,13 +34,13 @@ public class NoteSpawner : MonoBehaviour beatmap = loadedBeatmap; if (beatmap == null) { - //Debug.LogError("加载的谱面为空!"); + Debug.LogError("加载的谱面为空!"); return; } bpm = beatmap.bpm; startTime = Time.time; - //Debug.Log($"歌曲开始时间: {startTime}"); + Debug.Log($"歌曲开始时间: {startTime}"); StartCoroutine(SpawnNotes()); } @@ -54,7 +48,7 @@ public class NoteSpawner : MonoBehaviour { if (beatmap == null || beatmap.notes == null) { - //Debug.LogError("谱面数据为空!"); + Debug.LogError("谱面数据为空!"); isSpawning = false; yield break; } @@ -87,23 +81,23 @@ public class NoteSpawner : MonoBehaviour { if (noteData.trackIndex < 0 || noteData.trackIndex >= spawnPoints.Length) { - //Debug.LogError("轨道索引超出范围!"); + Debug.LogError("轨道索引超出范围!"); return; } KeyCode key = KeyBindingManager.GetKeyForColor(noteData.color); if (key == KeyCode.None) { - //Debug.LogError($"未找到颜色 {noteData.color} 对应的按键!请检查 KeyBindingManager 是否正确初始化。"); + Debug.LogError($"未找到颜色 {noteData.color} 对应的按键!请检查 KeyBindingManager 是否正确初始化。"); return; } - //Debug.Log($"生成短音符:颜色={noteData.color}, 按键={key}, 轨道={noteData.trackIndex}"); + Debug.Log($"生成短音符:颜色={noteData.color}, 按键={key}, 轨道={noteData.trackIndex}"); GameObject note = notePool.GetNote(noteData.color); if (note == null) { - //Debug.LogError("对象池返回了一个空音符!"); + Debug.LogError("对象池返回了一个空音符!"); return; } @@ -115,61 +109,66 @@ public class NoteSpawner : MonoBehaviour { float noteSpawnTime = Time.time; noteScript.Setup(key, noteData.trackIndex, CalculateSpeed(), noteData.time, noteData.color); - //Debug.Log($"到达时间:{noteSpawnTime + (60f / bpm) * 4}"); + Debug.Log($"到达时间:{noteSpawnTime + (60f / bpm) * 4}"); } else { - //Debug.LogError("音符预制体缺少 Note 组件!"); + Debug.LogError("音符预制体缺少 Note 组件!"); } } public void SpawnHoldNote(NoteData noteData) { - if (noteData == null) - { - //Debug.LogError("NoteData为空!"); - return; - } - if (noteData.trackIndex < 0 || noteData.trackIndex >= spawnPoints.Length) { - //Debug.LogError("轨道索引超出范围!"); + Debug.LogError("轨道索引超出范围!"); return; } KeyCode key = KeyBindingManager.GetKeyForColor(noteData.color); if (key == KeyCode.None) { - //Debug.LogError($"未找到颜色 {noteData.color} 对应的按键!"); + Debug.LogError($"未找到颜色 {noteData.color} 对应的按键!"); return; } if (string.IsNullOrEmpty(noteData.color)) { - //Debug.LogError("[NoteSpawner] noteData.color 为空,无法生成音符!"); + Debug.LogError("[NoteSpawner] noteData.color 为空,无法生成音符!"); return; } - //Debug.Log($"生成时间:{Time.time}"); - //Debug.Log($"生成长音符:颜色={noteData.color}, 按键={key}, 轨道={noteData.trackIndex}"); + Debug.Log($"生成时间:{Time.time}"); + Debug.Log($"生成长音符:颜色={noteData.color}, 按键={key}, 轨道={noteData.trackIndex}"); float segmentInterval = (60f / bpm) / 4f; int segmentCount = Mathf.CeilToInt(noteData.length / segmentInterval); Transform spawnPoint = spawnPoints[noteData.trackIndex]; float scheduledEndTime = noteData.time + noteData.length; - // 生成唯一ID - int holdNoteId = GenerateHoldNoteId(); + // 生成唯一 id + int holdNoteId = Random.Range(100000, 999999); // 生成 Start 段 GameObject startObj = notePool.GetStartNote(noteData.color); if (startObj == null) { - //Debug.LogError("对象池返回空 hold note start!"); + Debug.LogError("对象池返回空 hold note start!"); return; } + startObj.transform.position = spawnPoint.position; + startObj.transform.rotation = Quaternion.identity; - SetupHoldNoteSegment(startObj, spawnPoint, holdNoteId, noteData, key, 0f, false, "start", scheduledEndTime); + HoldNote holdNote = startObj.GetComponent(); + if (holdNote != null) + { + holdNote.Setup(holdNoteId, noteData.trackIndex, CalculateSpeed(), noteData.time, 0f, false, scheduledEndTime, noteData.color, key, "start"); + } + else + { + Debug.LogError("长音符 start 部分缺少 HoldNote 组件!"); + return; + } // 生成 Middle 和 End 段 for (int i = 1; i < segmentCount; i++) @@ -178,9 +177,6 @@ public class NoteSpawner : MonoBehaviour bool isEndSegment = (i == segmentCount - 1); string partType = isEndSegment ? "end" : "middle"; - // 应用gracePeriod - segmentDelay = CalculateSegmentDelay(segmentDelay, isEndSegment); - GameObject segObj = notePool.GetHoldNoteSegment(noteData.color); if (segObj == null) { @@ -188,60 +184,34 @@ public class NoteSpawner : MonoBehaviour continue; } - SetupHoldNoteSegment(segObj, spawnPoint, holdNoteId, noteData, key, segmentDelay, isEndSegment, partType, scheduledEndTime); - } - } + segObj.transform.position = spawnPoint.position; + segObj.transform.rotation = Quaternion.identity; - private int GenerateHoldNoteId() - { - return System.Guid.NewGuid().GetHashCode() & 0x7FFFFFFF; // 确保生成正数ID - } - - private float CalculateSegmentDelay(float delay, bool isEndSegment) - { - if (!isEndSegment && _holdNoteComponentCache != null) - { - delay -= _holdNoteComponentCache.segmentGracePeriod; - return Mathf.Max(delay, 0); - } - return delay; - } - - private void SetupHoldNoteSegment(GameObject noteObj, Transform spawnPoint, int holdNoteId, - NoteData noteData, KeyCode key, float delay, - bool isEnd, string type, float scheduledEndTime) - { - noteObj.transform.position = spawnPoint.position; - noteObj.transform.rotation = Quaternion.identity; - - HoldNote holdNote = noteObj.GetComponent(); - if (holdNote != null) - { - holdNote.Setup(holdNoteId, noteData.trackIndex, CalculateSpeed(), - noteData.time, delay, isEnd, scheduledEndTime, - noteData.color, key, type); - - // 注册结束时间 - if (isEnd) + HoldNote holdSeg = segObj.GetComponent(); + if (holdSeg != null) { - JudgeManager.Instance.RegisterScheduledEndTime(holdNoteId.ToString(), scheduledEndTime); + holdSeg.Setup(holdNoteId, noteData.trackIndex, CalculateSpeed(), noteData.time, segmentDelay, isEndSegment, scheduledEndTime, noteData.color, key, partType); + } + else + { + Debug.LogError("长音符片段缺少 HoldNote 组件!"); } } - else - { - //Debug.LogError("长音符片段缺少 HoldNote 组件!"); - } } + private float CalculateSpeed() { float noteTravelTime = (60f / bpm) * 4; return 10.75f / noteTravelTime; } - public void ResetAllHoldNotes() + private void Update() { - JudgeManager.Instance.ResetAllHoldNotes(); - //Debug.Log("重置所有长音符状态"); + //if (globalGameTime.text=="0.01") + //{ + // bgMusicAudioSource.Play(); + //} + //else return; } } diff --git a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs.meta b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs.meta index 933d22b7..fe0f37ac 100644 --- a/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs.meta +++ b/Assets/scripts/gamePlay_gameplay/NoteSpawner.cs.meta @@ -1,11 +1,11 @@ -fileFormatVersion: 2 -guid: 5a8261645f54b8647ba4c89adc503be9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: 5a8261645f54b8647ba4c89adc503be9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/scripts/gamePlay_gameplay/TrackKeyManager.cs b/Assets/scripts/gamePlay_gameplay/TrackKeyManager.cs index edf26008..e75571ca 100644 --- a/Assets/scripts/gamePlay_gameplay/TrackKeyManager.cs +++ b/Assets/scripts/gamePlay_gameplay/TrackKeyManager.cs @@ -20,7 +20,7 @@ public class TrackKeyManager : MonoBehaviour } /// - /// 当音符进入判定区域时,添加按键映射 + /// жʱӰӳ /// public void RegisterKey(int trackIndex, KeyCode key) { @@ -31,7 +31,7 @@ public class TrackKeyManager : MonoBehaviour } /// - /// 当音符离开判定区域时,移除按键映射 + /// 뿪жʱƳӳ /// public void UnregisterKey(int trackIndex, KeyCode key) { @@ -45,7 +45,7 @@ public class TrackKeyManager : MonoBehaviour } /// - /// 获取轨道当前的按键(队列头) + /// ȡǰİͷ /// public KeyCode GetCurrentKey(int trackIndex) { @@ -53,6 +53,6 @@ public class TrackKeyManager : MonoBehaviour { return trackKeyMappings[trackIndex].Peek(); } - return KeyCode.None; // 无按键 + return KeyCode.None; // ް } }