using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class MusicManager : MonoBehaviour { public static MusicManager Instance; [Header("Audio")] public AudioClip musikMenu; public AudioClip musikQuiz; private AudioSource audioSource; public bool musikAktif = true; void Awake() { if (Instance != null) { Destroy(gameObject); return; } Instance = this; DontDestroyOnLoad(gameObject); // ✅ MusicManager punya Audio Listener sendiri AudioListener al = gameObject.GetComponent(); if (al == null) gameObject.AddComponent(); audioSource = gameObject.AddComponent(); audioSource.loop = true; audioSource.playOnAwake = false; audioSource.clip = musikMenu; if (musikAktif) audioSource.Play(); SceneManager.sceneLoaded += OnSceneLoaded; } void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.name == "Menu Kuis") { GantiMusik(musikQuiz); } else { GantiMusik(musikMenu); } // ✅ Kalau di Menu AR, matikan Audio Listener ARCamera if (scene.name == "Menu AR") { StartCoroutine(MatikanARListener()); } } IEnumerator MatikanARListener() { // Tunggu 1 frame biar ARCamera keburu ke-load yield return null; AudioListener[] listeners = FindObjectsByType(FindObjectsSortMode.None); foreach (AudioListener al in listeners) { // ✅ Matikan semua Audio Listener kecuali punya MusicManager if (al.gameObject != this.gameObject) { al.enabled = false; Debug.Log("MusicManager: matikan AudioListener di " + al.gameObject.name); } } } void GantiMusik(AudioClip clip) { if (clip == null) return; if (audioSource.clip == clip) { if (musikAktif && !audioSource.isPlaying) audioSource.Play(); return; } audioSource.clip = clip; if (musikAktif) audioSource.Play(); } public float GetVolume() => audioSource.volume; public void SetVolume(float v) => audioSource.volume = Mathf.Clamp01(v); public void KlikToggleMusik() { musikAktif = !musikAktif; if (musikAktif) audioSource.Play(); else audioSource.Stop(); } void OnDestroy() { SceneManager.sceneLoaded -= OnSceneLoaded; } }