Audio Endless Loop c#
When script plays an audioclip when the timer runs out, however it keeps playing the sound endlessly on every frame and it sounds bad and makes the game lag. I have the audio's loop value set to false. Does anybody know how to fix this?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class audioTimer : MonoBehaviour
{
bool okayToPlayAudio;
public float timeLeft = 10f; //time in seconds
public AudioSource theaterVoice;
public AudioClip audioClip;
public void Update()
{
if (timeLeft > 0.0)
{
timeLeft -= Time.deltaTime;
}
else
{
okayToPlayAudio = true;
}
if(okayToPlayAudio)
{
theaterVoice.PlayOneShot(audioClip, 1.0f);
okayToPlayAudio = false;
}
}
Answer by Daloots · Jan 08, 2017 at 08:16 PM
@BakedSteakGames, you are not resetting your timer after is has expired, so you always go into the else statement once that has happened. If you want the timer to reset, change
if (okayToPlayAudio)
{
theaterVoice.PlayOneShot(audioClip, 1.0f);
okayToPlayAudio = false;
}
To
if (okayToPlayAudio)
{
theaterVoice.PlayOneShot(audioClip, 1.0f);
okayToPlayAudio = false;
timeLeft = 10.0f;
}
There is a slightly more elegant way to get a timer though:
public class AudioTimer : MonoBehaviour
{
public float timeLeft = 10f; //time in seconds
public AudioSource theaterVoice;
public AudioClip audioClip;
void Start ()
{
StartCoroutine(DoTimer(timeLeft));
}
IEnumerator DoTimer(float time)
{
yield return new WaitForSeconds(time);
theaterVoice.PlayOneShot(audioClip, 1.0f);
}
}
Thanks, what I ended up doing was destroying the audio source after the sound played and now it works how I originally intended for it to work.
Your answer
Follow this Question
Related Questions
Audio or Music continuing to play between scenes 1 Answer
convert this 3 line code to c# ? i cant figure it out? 1 Answer
Soundarray for player is not working properly 1 Answer
Audio Source does not contain definition for any of the Play functions... 2 Answers
Stop AudioSource on Trigger!!! 1 Answer