using System.Collections.Generic; using UnityEngine; public class TrackKeyManager : MonoBehaviour { public static TrackKeyManager Instance { get; private set; } private Dictionary> trackKeyMappings = new Dictionary>(); private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } /// /// 当音符进入判定区域时,添加按键映射 /// public void RegisterKey(int trackIndex, KeyCode key) { if (!trackKeyMappings.ContainsKey(trackIndex)) trackKeyMappings[trackIndex] = new Queue(); trackKeyMappings[trackIndex].Enqueue(key); } /// /// 当音符离开判定区域时,移除按键映射 /// public void UnregisterKey(int trackIndex, KeyCode key) { if (!trackKeyMappings.ContainsKey(trackIndex) || trackKeyMappings[trackIndex].Count == 0) return; if (trackKeyMappings[trackIndex].Peek() == key) { trackKeyMappings[trackIndex].Dequeue(); } } /// /// 获取轨道当前的按键(队列头) /// public KeyCode GetCurrentKey(int trackIndex) { if (trackKeyMappings.ContainsKey(trackIndex) && trackKeyMappings[trackIndex].Count > 0) { return trackKeyMappings[trackIndex].Peek(); } return KeyCode.None; // 无按键 } }