MIF_E31230837/Assets/Script/NarasiAudio.cs

101 lines
2.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// Attach ke GameObject yang SAMA dengan MenuMateriSlide.
/// Tambahkan AudioSource baru (bukan yang dipakai button) ke GameObject ini,
/// lalu assign ke field audioSource di Inspector.
/// </summary>
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>();
}
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);
}
/// <summary>Dipanggil oleh MenuMateriSlide saat kartu berganti.</summary>
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
}
}