Game-Edukasi-Rambu-Pintar/Asset/Assets/Script/SuaraMesinMobil.cs

82 lines
2.3 KiB
C#

using UnityEngine;
public class SuaraMesinMobil : MonoBehaviour
{
[Header("Pengaturan Audio")]
public AudioSource mesinAudioSource;
[Tooltip("Pitch saat mobil diam (suara berat)")]
public float pitchDiam = 0.5f;
[Tooltip("Pitch maksimal saat ngegas penuh")]
public float pitchGas = 1.6f;
[Tooltip("Kecepatan transisi naik/turun suara.")]
public float kecepatanTransisi = 5f;
private bool sedangNgegas = false;
private bool isKuisAktif = false;
private float volumeAwal = 1f;
private bool isGameFinished = false; // [TAMBAHAN] Flag untuk mendeteksi game selesai
void Start()
{
if (mesinAudioSource != null)
{
mesinAudioSource.pitch = pitchDiam;
volumeAwal = mesinAudioSource.volume;
mesinAudioSource.Play();
}
}
void Update()
{
// [TAMBAHAN] Jika game sudah finish atau AudioSource kosong, langsung hentikan fungsi Update
if (isGameFinished || mesinAudioSource == null) return;
float delta = Time.unscaledDeltaTime;
if (isKuisAktif)
{
mesinAudioSource.volume = Mathf.Lerp(mesinAudioSource.volume, 0f, delta * 10f);
mesinAudioSource.pitch = Mathf.Lerp(mesinAudioSource.pitch, pitchDiam, delta * kecepatanTransisi);
}
else
{
mesinAudioSource.volume = Mathf.Lerp(mesinAudioSource.volume, volumeAwal, delta * 5f);
float targetPitch = sedangNgegas ? pitchGas : pitchDiam;
mesinAudioSource.pitch = Mathf.Lerp(mesinAudioSource.pitch, targetPitch, delta * kecepatanTransisi);
}
}
public void GasDitekan()
{
if (!isKuisAktif && !isGameFinished) sedangNgegas = true;
}
public void GasDilepas()
{
sedangNgegas = false;
}
public void SenyapkanMesin(bool senyap)
{
isKuisAktif = senyap;
if (senyap)
{
sedangNgegas = false;
}
}
// [TAMBAHAN] Fungsi khusus untuk dipanggil saat menyentuh Finish
public void MatikanMesinTotal()
{
isGameFinished = true;
sedangNgegas = false;
if (mesinAudioSource != null)
{
mesinAudioSource.Stop(); // Matikan suara seketika
}
this.enabled = false; // Nonaktifkan script
}
}