2025-11-25 08:19:33 -05:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using AK.Wwise;
|
|
|
|
|
|
using Sirenix.OdinInspector;
|
2026-05-26 00:21:27 -04:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using Event = AK.Wwise.Event;
|
2025-11-25 08:19:33 -05:00
|
|
|
|
|
2026-02-13 09:22:11 -05:00
|
|
|
|
namespace SLSUtilities.WwiseAssistance
|
2025-11-25 08:19:33 -05:00
|
|
|
|
{
|
|
|
|
|
|
public class BackgroundMusicManager : SerializedMonoBehaviour
|
|
|
|
|
|
{
|
|
|
|
|
|
public Dictionary<string, State> baseMusicDictionary; // 背景音乐事件字典
|
|
|
|
|
|
public Event playMusicEvent; // 播放背景音乐的事件
|
|
|
|
|
|
public Event stopMusicEvent; // 停止播放背景音乐的事件
|
|
|
|
|
|
|
2026-05-26 00:21:27 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否被外部系统(如 MusicBeatSystem)覆盖中
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[ShowInInspector, ReadOnly]
|
|
|
|
|
|
private bool isOverridden;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 最后一次播放请求的音乐 State 名称,用于恢复
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private string lastMusicStateName;
|
|
|
|
|
|
|
2025-11-25 08:19:33 -05:00
|
|
|
|
private void Start()
|
|
|
|
|
|
{
|
|
|
|
|
|
PlayMusic("NormalMusic");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-26 00:21:27 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 播放指定 State 的背景音乐。被覆盖期间调用会被静默忽略
|
|
|
|
|
|
/// </summary>
|
2025-11-25 08:19:33 -05:00
|
|
|
|
public void PlayMusic(string musicStateName)
|
|
|
|
|
|
{
|
2026-05-26 00:21:27 -04:00
|
|
|
|
if (isOverridden)
|
2025-11-25 08:19:33 -05:00
|
|
|
|
{
|
2026-05-26 00:21:27 -04:00
|
|
|
|
lastMusicStateName = musicStateName;
|
|
|
|
|
|
return;
|
2025-11-25 08:19:33 -05:00
|
|
|
|
}
|
2026-05-26 00:21:27 -04:00
|
|
|
|
|
|
|
|
|
|
lastMusicStateName = musicStateName;
|
|
|
|
|
|
stopMusicEvent.Post(gameObject);
|
|
|
|
|
|
playMusicEvent.Post(gameObject);
|
2025-11-25 08:19:33 -05:00
|
|
|
|
}
|
2026-05-26 00:21:27 -04:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 停止背景音乐
|
|
|
|
|
|
/// </summary>
|
2025-11-25 08:19:33 -05:00
|
|
|
|
public void StopMusic()
|
|
|
|
|
|
{
|
|
|
|
|
|
stopMusicEvent.Post(gameObject);
|
|
|
|
|
|
}
|
2026-05-26 00:21:27 -04:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 设置覆盖状态。被覆盖期间,常规 PlayMusic 调用将被静默忽略
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void SetOverride(bool overridden)
|
|
|
|
|
|
{
|
|
|
|
|
|
isOverridden = overridden;
|
|
|
|
|
|
}
|
2025-11-25 08:19:33 -05:00
|
|
|
|
}
|
2026-05-26 00:21:27 -04:00
|
|
|
|
}
|