- Home /
Audio Clip Playing every frame
My script plays my audioClip after the timer runs out, however once it starts playing, it plays the clip every frame and sounds weird, buggy, and it never ends. How can I make it so that it only plays the clip once and stop refreshing the sounds every frame? Loop is set to False as well.
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 ooblii · Jan 09, 2017 at 02:08 PM
@BakedSteakGames Your problem is that it's always technically "okayToPlayAudio" once the timer hits 0. Even though you've set it to false after you play the clip, it just gets set right back to true the way it's coded. Consider using a separate bool like hasAudioPlayed to check if the audio has played once. Set it to true after playing the audio and put this as your second if statement:
if (okayToPlayAudio && !hasAudioPlayed) {
Or better yet, don't play audio via the Update method.
Answer by Paricus · Jan 09, 2017 at 04:00 PM
As ooblii has said, you're setting your 'oktoplay' variable to true every frame. Either set the time left variable to something above zero or have a 'hasplayed' Boolean set to true when it's been played
Your answer
Follow this Question
Related Questions
[Rhytm game] How to spawn on exact time of music? 3 Answers
How to play "audiosource" component in a prefab from script? 0 Answers
Triggering multiple audio clips to play in sequence 1 Answer
AudioClip stuttering while loop is OFF and not using function Update? 1 Answer
How can I play audio clips depending on the players movement 0 Answers