改动与优化

This commit is contained in:
FloatGaming
2026-07-20 22:19:25 +08:00
parent 0a0872c4f4
commit b5d1cdcbc5
83 changed files with 2475 additions and 276 deletions
+17 -3
View File
@@ -15,7 +15,20 @@ public class MusicPlayer : MonoBehaviour
public Button Button_List;
public Slider Slider_Progress;
public Music_Data Music_Data => Music_Mgr.Singleton.Music_Cur;
public static AudioSource Music_Source => Music_Mgr.Singleton.AudioSource;
public static AudioSource Music_Source
{
get
{
BgmPlaybackManager bgm = BgmPlaybackManager.Instance;
if (bgm != null && bgm.audioSource != null)
{
return bgm.audioSource;
}
Music_Mgr manager = Music_Mgr.Singleton;
return manager != null ? manager.AudioSource : null;
}
}
private void Start()
{
if (Music_Data != null)
@@ -32,10 +45,11 @@ public class MusicPlayer : MonoBehaviour
private void Update()
{
if (Music_Source.clip != null)
AudioSource source = Music_Source;
if (source != null && source.clip != null)
{
_sb.Clear();
_sb.Append(Music_Mgr.Get_Time_Cur(Music_Source)).Append("/").Append(Music_Mgr.Get_Time_Max(Music_Source.clip));
_sb.Append(Music_Mgr.Get_Time_Cur(source)).Append("/").Append(Music_Mgr.Get_Time_Max(source.clip));
Text_Time.text = _sb.ToString();
}
}
+44 -1
View File
@@ -113,16 +113,30 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
public void Play(Music_Data data)
{
if (data == null) return;
Music_Cur = data;
if (!ShouldPlayInScene(SceneManager.GetActiveScene().name))
{
StopMusicPlayback();
return;
}
Music_Cur = data;
if (TryPlayThroughBgmManager(data, true))
{
StopMusicPlayback();
RefreshPlayers(data);
return;
}
AudioSource.clip = data.Clip;
AudioSource.Play();
RefreshPlayers(data);
}
private void RefreshPlayers(Music_Data data)
{
var players = Object.FindObjectsByType<MusicPlayer>(FindObjectsInactive.Include, FindObjectsSortMode.None);
foreach (var player in players)
{
@@ -176,6 +190,18 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
return;
}
if (Music_Cur == null && Music_Data_List != null && Music_Data_List.Count > 0)
{
Music_Cur = Music_Data_List[0];
}
if (Music_Cur != null && TryPlayThroughBgmManager(Music_Cur, false))
{
StopMusicPlayback();
RefreshPlayers(Music_Cur);
return;
}
if (AudioSource != null && !AudioSource.isPlaying)
{
if (Music_Cur != null)
@@ -196,4 +222,21 @@ public class Music_Mgr : Singleton_Mono<Music_Mgr>
AudioSource.Stop();
}
}
private bool TryPlayThroughBgmManager(Music_Data data, bool restart)
{
if (data == null || data.Clip == null)
{
return false;
}
BgmPlaybackManager bgm = BgmPlaybackManager.Instance;
if (bgm == null)
{
return false;
}
bgm.PlayExternalClip(data.Clip, restart);
return true;
}
}
@@ -26,7 +26,7 @@ public class UI_Panel_Music : MonoBehaviour
{
if (Input.GetKeyDown(KeyCode.Escape))
{
gameObject.SetActive(false);
ClosePanel();
}
}
private void Start()
@@ -57,12 +57,21 @@ public class UI_Panel_Music : MonoBehaviour
music_Data_List = Get_Music_Page(index);
foreach (var item in music_Data_List)
for (int i = 0; i < music_Data_List.Count; i++)
{
var item = music_Data_List[i];
var slot = Instantiate(prefab_Music_Slot, group_Music.transform);
UISystemBootstrap.RegisterHierarchy(slot.gameObject);
slot.Refresh(item);
music_Slot_List.Add(slot);
UI_OrderedEntryAnimator.PlayFadeOnly(slot.gameObject, i, 0.16f, 0.018f, true);
}
if (group_Music != null)
{
Canvas.ForceUpdateCanvases();
LayoutRebuilder.ForceRebuildLayoutImmediate(group_Music.transform as RectTransform);
Canvas.ForceUpdateCanvases();
}
}
public List<Music_Data> Get_Music_Page(int index)
@@ -79,4 +88,15 @@ public class UI_Panel_Music : MonoBehaviour
return list;
}
private void ClosePanel()
{
UI_PanelExitUtility.PlayExitThen(gameObject, () =>
{
if (gameObject != null)
{
gameObject.SetActive(false);
}
});
}
}