Files
Cielonos/Assets/Scripts/SLSUtilities/WwiseAssistance/BackgroundMusicManager.cs

64 lines
1.8 KiB
C#
Raw Normal View History

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
}