using UnityEngine; using UnityEngine.UI; /// /// Attach ke GameObject yang SAMA dengan MenuMateriSlide. /// Tambahkan AudioSource baru (bukan yang dipakai button) ke GameObject ini, /// lalu assign ke field audioSource di Inspector. /// public class NarasiAudio : MonoBehaviour { [Header("Audio")] public AudioSource audioSource; public Button buttonAudio; [Range(0f, 1f)] public float backsoundVolumeDuringNarasi = 0.2f; [Tooltip("Isi AudioClip sesuai urutan Materi 1, 2, 3, dst")] public AudioClip[] narasiClips; private int currentIndex = 0; private float originalBacksoundVolume = 1f; void Awake() { // Jika belum di-assign, cari AudioSource di children bernama "NarasiSource" if (audioSource == null) { var go = new GameObject("NarasiSource"); go.transform.SetParent(transform); audioSource = go.AddComponent(); } audioSource.playOnAwake = false; audioSource.loop = false; audioSource.Stop(); } void Start() { if (buttonAudio != null) buttonAudio.onClick.AddListener(ToggleAudio); if (MusicManager.Instance != null) originalBacksoundVolume = MusicManager.Instance.GetVolume(); SetClip(0); } /// Dipanggil oleh MenuMateriSlide saat kartu berganti. public void OnCardChanged(int index) { currentIndex = index; StopAudio(); SetClip(index); } void SetClip(int index) { if (narasiClips == null || index >= narasiClips.Length) return; if (narasiClips[index] == null) return; audioSource.clip = narasiClips[index]; UpdateIcon(false); } public void ToggleAudio() { if (audioSource.isPlaying) { StopAudio(); } else { if (audioSource.clip == null) { Debug.LogWarning("[NarasiAudio] Clip null di index " + currentIndex); return; } audioSource.Play(); if (MusicManager.Instance != null) MusicManager.Instance.SetVolume(backsoundVolumeDuringNarasi); UpdateIcon(true); } } void StopAudio() { if (audioSource != null && audioSource.isPlaying) audioSource.Stop(); if (MusicManager.Instance != null) MusicManager.Instance.SetVolume(originalBacksoundVolume); UpdateIcon(false); } void UpdateIcon(bool isPlaying) { // Icon tidak dipakai } }