Also, how to play sounds only ONCE if a condition is met? Since everything happens in Update() , if I use a conditional statement i just end up firing off my sound every frame.
I can play a sound like this but that is only because the player presses the Escape button. I tried PlayOneShot but the results were the same. Ultimately I would like to have one sound on pause and another on play. With my current code I can only have 1.
For the first code snippet you are trying to call audio.Play(); on a destroyed object.For calling audio on destroying object use something like this.Use another script like SoundManager.cs on a gameobject named SoundManager for playing sounds.
//SoundManager.cs script
public class SoundManager:MonoBehaviour
{
void Start()
{
//Create the audio source
//Load the audio clip
}
//The public function we will use to call to play the sound
public void PlayJumpSound()
{
//Play the sound
audio.play();
}
}
Now use your trigger scrpit like this
void OnTriggerEnter2D(Collider2D other)
{
if(other.tag=="Player"
{
//Play the audio
GameObject.Find("SoundManager").GetComponent<SoundManager>().PlayJumpSound();
//Incriment the jump attempts
jumper.jumpAttempts++;
//Destroy the gameobject
Destroy(gameObject);
}
}
The update function will call once per frame.That is if your FPS is 60,the Update() method will call 60 times a second.using audio.Play() directly in this method will keep on calling this method which will not give you the proper result.Use a boolean to make sure the function will only get called once