using System; using System.Collections.Generic; using UnityEngine; [Serializable] public class BeatSageRoot { public string _version; public List _notes; } [Serializable] public class BeatSageNote { public float _time; public int _lineIndex; public int _lineLayer; public int _type; public int _cutDirection; } public static class BeatSageConverter { public static List Convert(string rawJson, float bpm) { var result = new List(); BeatSageRoot sageData = JsonUtility.FromJson(rawJson); if (sageData?._notes == null) { Debug.LogWarning("[BeatSageConverter] 파싱 실패 또는 노트 없음."); return result; } foreach (var note in sageData._notes) { // 일반 노트(0: 빨강, 1: 파랑)만 처리, 폭탄(3) 등 제외 if (note._type != 0 && note._type != 1) continue; result.Add(new NoteData { time = (note._time * 60f) / bpm, position = note._lineIndex, colorType = note._type }); } Debug.Log($"[BeatSageConverter] 변환 완료: {result.Count}개 노트"); return result; } public static string ToMapJson(List notes) { var mapData = new MapData { target = notes }; return JsonUtility.ToJson(mapData, true); } }