Files
bansonic_beta_main/Assets/scripts/gamePlay_gameplay/GameManager.cs
T

120 lines
3.6 KiB
C#

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() 被调用");
// 检查关键组件是否为空
if (beatmapManager == null) Debug.LogError("beatmapManager 未赋值!");
if (noteSpawner == null) Debug.LogError("noteSpawner 未赋值!");
if (musicSource == null) Debug.LogError("musicSource 未赋值!");
// 在游戏开始时加载并初始化谱面
string beatmapFilePath = Path.Combine(Application.streamingAssetsPath, "Emilia_demo.json");
if (!File.Exists(beatmapFilePath))
{
//Debug.LogError($"谱面文件不存在: {beatmapFilePath}");
return;
}
string json = File.ReadAllText(beatmapFilePath);
Beatmap beatmap = JsonUtility.FromJson<Beatmap>(json); // 解析 JSON 为 Beatmap 对象
if (beatmap == null)
{
//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<AudioClip>(musicPath);
if (musicClip == null)
{
//Debug.LogError($"音乐文件加载失败,尝试路径: {musicPath}");
// 列出Resources文件夹下所有音频文件用于调试
var allAudio = Resources.LoadAll<AudioClip>("");
//Debug.Log("可用音频文件:" + string.Join(", ", allAudio.Select(a => a.name)));
}
else
{
musicSource.clip = musicClip;
musicSource.Play();
}
}
else
{
//Debug.LogError("谱面中 musicFile 为空!");
}
}
}