31 lines
1.2 KiB
C#
31 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class Note
|
|
{
|
|
[HideInInspector] public float Time; // 판정 시각(초)
|
|
[HideInInspector] public int Lane; // 레인 인덱스 (단일 레인이면 0)
|
|
}
|
|
|
|
[CreateAssetMenu(fileName = "RhythmChart", menuName = "CatsRoom/RhythmChart")]
|
|
public class RhythmChart : ScriptableObject
|
|
{
|
|
public AudioClip SongClip; // 노래 파일
|
|
public TextAsset MidiFile; // FL Studio에서 내보낸 .mid (확장자를 .bytes로 임포트)
|
|
public float Offset; // 곡 시작과 MIDI 0틱 사이 보정(초)
|
|
public float BpmOverride; // 0이면 MIDI 내장 템포 사용, >0이면 이 BPM으로 강제
|
|
public List<int> LanePitches = new(); // 비우면 모든 노트를 레인 0으로. 채우면 (index=레인) 매핑
|
|
|
|
// MIDI를 파싱해 노트 시간 목록 생성
|
|
public List<Note> GenerateNotes()
|
|
{
|
|
if (MidiFile == null)
|
|
{
|
|
Debug.LogWarning($"[RhythmChart] {name}: MidiFile이 비어 있습니다.");
|
|
return new List<Note>();
|
|
}
|
|
|
|
return MidiChartParser.Parse(MidiFile.bytes, Offset, BpmOverride, LanePitches);
|
|
}
|
|
}
|