UI换了很多,spine主视觉停用
This commit is contained in:
@@ -5,46 +5,36 @@ using UnityEngine.SceneManagement;
|
||||
|
||||
public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
{
|
||||
private const string MainSceneName = "Main_main";
|
||||
private const string GameplaySceneName = "gamePlay_gamePlay";
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
SceneManager.sceneLoaded += OnSceneLoaded;
|
||||
ApplyScenePlaybackPolicy(SceneManager.GetActiveScene());
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
SceneManager.sceneLoaded -= OnSceneLoaded;
|
||||
StopMusicPlayback();
|
||||
}
|
||||
|
||||
protected override void OnDestroy()
|
||||
{
|
||||
StopMusicPlayback();
|
||||
base.OnDestroy();
|
||||
}
|
||||
|
||||
private void OnApplicationQuit()
|
||||
{
|
||||
StopMusicPlayback();
|
||||
}
|
||||
|
||||
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
// 现在这两个场景是不合规的,需要停止播放
|
||||
bool isDisallowedScene = scene.name == "Main_main" || scene.name == "gamePlay_gamePlay";
|
||||
ApplyScenePlaybackPolicy(scene);
|
||||
|
||||
if (isDisallowedScene)
|
||||
{
|
||||
// 如果是不合规场景且正在播放,则停止
|
||||
if (AudioSource != null && AudioSource.isPlaying)
|
||||
{
|
||||
AudioSource.Stop();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果是合规场景(其他所有场景)且当前没在播放,则尝试播放
|
||||
if (AudioSource != null && !AudioSource.isPlaying)
|
||||
{
|
||||
if (Music_Cur != null)
|
||||
{
|
||||
AudioSource.Play();
|
||||
}
|
||||
else if (Music_Data_List != null && Music_Data_List.Count > 0)
|
||||
{
|
||||
Play(Music_Data_List[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 切换场景后,如果存在播放器UI,确保其显示正确的数据
|
||||
if (Music_Cur != null)
|
||||
{
|
||||
var players = Object.FindObjectsByType<MusicPlayer>(FindObjectsInactive.Include, FindObjectsSortMode.None);
|
||||
@@ -57,13 +47,14 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
|
||||
public static string Get_Time_Max(AudioClip clip)
|
||||
{
|
||||
|
||||
return Get_Time(clip == null ? 0 : (int)clip.length);
|
||||
}
|
||||
|
||||
public static string Get_Time_Cur(AudioSource aus)
|
||||
{
|
||||
return Get_Time((int)aus.time);
|
||||
}
|
||||
|
||||
private static System.Text.StringBuilder _timeSb = new System.Text.StringBuilder();
|
||||
|
||||
public static string Get_Time(int time)
|
||||
@@ -80,6 +71,7 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
_timeSb.Append(currentMinute.ToString("D2")).Append(":").Append(currentSecond.ToString("D2")).Append(" ");
|
||||
return _timeSb.ToString();
|
||||
}
|
||||
|
||||
public static float Get_Time_Cur_Prv(AudioSource aus)
|
||||
{
|
||||
return aus.time / aus.clip.length;
|
||||
@@ -88,12 +80,14 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
public List<Music_Data> Music_Data_List;
|
||||
public AudioSource AudioSource;
|
||||
public Music_Data Music_Cur;
|
||||
|
||||
protected override void In_Init()
|
||||
{
|
||||
if (TryGetComponent(out AudioSource) == false)
|
||||
{
|
||||
AudioSource = gameObject.AddComponent<AudioSource>();
|
||||
}
|
||||
|
||||
StartCoroutine(LoadMusicDataRoutine());
|
||||
}
|
||||
|
||||
@@ -105,25 +99,30 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
for (int i = 0; i < rawData.Length; i++)
|
||||
{
|
||||
Music_Data_List.Add(rawData[i]);
|
||||
// Avoid a frame hitch if there are many clips in Resources.
|
||||
if ((i & 7) == 7) yield return null;
|
||||
}
|
||||
|
||||
if (Music_Data_List.Count > 0)
|
||||
{
|
||||
Play(Music_Data_List[0]);
|
||||
ApplyScenePlaybackPolicy(SceneManager.GetActiveScene());
|
||||
}
|
||||
|
||||
yield break;
|
||||
}
|
||||
|
||||
public void Play(Music_Data data)
|
||||
{
|
||||
if (data == null) return;
|
||||
if (!ShouldPlayInScene(SceneManager.GetActiveScene().name))
|
||||
{
|
||||
StopMusicPlayback();
|
||||
return;
|
||||
}
|
||||
|
||||
Music_Cur = data;
|
||||
AudioSource.clip = data.Clip;
|
||||
AudioSource.Play();
|
||||
|
||||
// 刷新所有正在显示的 MusicPlayer UI
|
||||
var players = Object.FindObjectsByType<MusicPlayer>(FindObjectsInactive.Include, FindObjectsSortMode.None);
|
||||
foreach (var player in players)
|
||||
{
|
||||
@@ -146,8 +145,55 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
|
||||
index = (index - 1 + Music_Data_List.Count) % Music_Data_List.Count;
|
||||
Play(Music_Data_List[index]);
|
||||
}
|
||||
|
||||
protected override bool Is_Singleton_Auto()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool ShouldPlayInScene(string sceneName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(sceneName))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return !string.Equals(sceneName, MainSceneName, System.StringComparison.OrdinalIgnoreCase)
|
||||
&& !string.Equals(sceneName, GameplaySceneName, System.StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
private void ApplyScenePlaybackPolicy(Scene scene)
|
||||
{
|
||||
if (!scene.IsValid() || !scene.isLoaded)
|
||||
{
|
||||
StopMusicPlayback();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!ShouldPlayInScene(scene.name))
|
||||
{
|
||||
StopMusicPlayback();
|
||||
return;
|
||||
}
|
||||
|
||||
if (AudioSource != null && !AudioSource.isPlaying)
|
||||
{
|
||||
if (Music_Cur != null)
|
||||
{
|
||||
AudioSource.Play();
|
||||
}
|
||||
else if (Music_Data_List != null && Music_Data_List.Count > 0)
|
||||
{
|
||||
Play(Music_Data_List[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void StopMusicPlayback()
|
||||
{
|
||||
if (AudioSource != null && AudioSource.isPlaying)
|
||||
{
|
||||
AudioSource.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user