- Home /
How to stop only one audio clip?,How do I stop only one audioclip?
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;
public class Rocket : MonoBehaviour {
[SerializeField] float rcsThrust = 100f;
[SerializeField] float mainThrust =100f;
Rigidbody rigidBody;
public AudioClip crash;
public AudioClip engine;
public AudioClip victory;
AudioSource audioSource;
bool victoryPlayed = false;
bool crashPlayed = false;
bool Alive = true;
// Use this for initialization
void Start ()
{
rigidBody = GetComponent<Rigidbody>();
audioSource = GetComponent<AudioSource> ();
}
// Update is called once per frame
void Update ()
{
if (Alive == true) {
Rotate ();
Thrust ();
}
}
void OnCollisionEnter(Collision collision)
{
switch (collision.gameObject.tag)
{
case "Friendly":
break;
case "Finish":
Victory ();
break;
default:
Alive = false;
StartCoroutine (WaitForPlay (2.0f));
break;
}
}
void Thrust ()
{
if (Input.GetKey (KeyCode.Space)) {
rigidBody.AddRelativeForce (Vector3.up * mainThrust);
if (!audioSource.isPlaying) {
audioSource.PlayOneShot (engine);
}
}
else {
//audioSource.Stop ();
}
}
//Handles up movement as welll as side to side
private void Rotate()
{
rigidBody.freezeRotation = true;
float rotationThisFrame = rcsThrust * Time.deltaTime;
if (Input.GetKey (KeyCode.A))
{
transform.Rotate (Vector3.forward * rotationThisFrame);
} else if (Input.GetKey (KeyCode.D))
{
transform.Rotate (-Vector3.forward * rotationThisFrame);
}
rigidBody.freezeRotation = false;
}
void Victory()
{
if (victoryPlayed == false)
{
audioSource.PlayOneShot (victory);
victoryPlayed = true;
StartCoroutine (WaitForVictory (2.0f));
}
}
IEnumerator WaitForVictory(float WaitTime)
{
yield return new WaitForSeconds (1.5f);
SceneManager.LoadScene(1);
}
IEnumerator WaitForPlay(float waitTime)
{
if (crashPlayed == false)
{
audioSource.Stop ();
crashPlayed = true;
audioSource.PlayOneShot (crash);
yield return new WaitForSeconds(1.5f);
SceneManager.LoadScene(0);
}
}
}
The victory sound will not play because the rocket is not thrusting while you are landing thereforce it stops the audio source. How do I prevent this from happening. Why is there not a way to stop only one clip instead of the entire source? It makes no sense that the unity devs would not make it easier to stop only certain sounds. How do I work around this problem?
You can't stop a PlayOneShot, what you can do though is control what is actually being played. Like this.
public AudioClip LoseSound;
public AudioClip WinSound;
public AudioSource mainSource;
public void SetWin()
{
//Win code
mainSource.clip = WinSound;
mainSource.Play();
}
public void SetLose()
{
//Lose code
mainSource.clip = LoseSound;
mainSource.Play();
}
Your answer
Follow this Question
Related Questions
Change Unity 3d Audio Spatializer Plugin 0 Answers
Is there any way of detecting what type of audio is recorded using microphone? 1 Answer
Unity not playing audio 0 Answers
Any way to disable log message "There are no audio listeners..."? 6 Answers
Audio Clip doesn't work in editor preview or on an object with a source. 0 Answers