- Home /
How do I play a sound during a level change?
Earlier, I asked the question how to end a level. It was solved with the following script:
//Script to revert winning player back to main menu
var levelToLoad : String;
function OnTriggerEnter(hit : Collider)
{
Application.LoadLevel(levelToLoad);
}//END FUNCTION ONTRIGGERENTER
Now, I want to add a sound to it. What I've attempted doing is creating a variable called triumph, and then using the audio.PlayOneShot code. However, this never plays it, and actually prevents the player from moving to the next level. I'm not sure how to add the sound to it. The sound is named Pop! Triumph! and it doesn't loop. Also, I'm not going to use any other sound, so it doesn't have to be a variable.
So can anyone make an addition to this script to make the sound play?
Do you have any errors in your console? if it never loads the level, it sounds like it's causing an error and ceasing execution of that function.
Answer by AnaRhisT · Jun 22, 2010 at 08:50 AM
- Import your audio files into your Unity Project. These are now Audio Clips.
- Go to GameObject->Create Empty from the menubar.
- With the new GameObject selected, select Component->Audio->Audio Source.
- Assign the Audio Clip property of the Audio Source Component in the Inspector.
Hints:
* The key to a nice sound environment is tweaking the Rolloff Factor.
* 3D audio effects will only work for mono Audio Clips. Stereo Audio Clips will be mixed as-is into the sound output.
I'll give u a C# verison, the sound file has to be in ur "Resources" Folder.
using UnityEngine; using System.Collections;
public class Sound_Player: MonoBehaviour { AudioSource audio_source; AudioClip sound; // Use this for initialization void Start () { audio_source = (AudioSource)gameObject.AddComponent("AudioSource"); sound = (AudioClip)Resources.Load("File Name"); audio_source.clip = sound; } // Update is called once per frame void Update () {
}
//Script to revert winning player back to main menu
var levelToLoad : String;
function OnTriggerEnter(hit : Collider) {
audio_source.Play(); Application.LoadLevel(levelToLoad);
}//END FUNCTION ONTRIGGERENTER
}
Answer by Mike 3 · Jun 22, 2010 at 01:15 PM
The problem is that the sound will be stopped when you try to load the next level
What I would do is play a sound (using audio.Play, not PlayOneShot), and wait until audio.IsPlaying is false. After that, load the level like you normally would
Answer by f_Linoal · Oct 31, 2012 at 09:37 PM
The reason why sound stops is that SoundClip and SoundSource are all destroyed while changing level. Use "DontDestroyOnLoad" method and protect GameObjects with sound components.
Your answer
Follow this Question
Related Questions
Making sounds wait for each other to finish 2 Answers
Can I call sounds from other script? 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Do I have to create an audio source component to play a sound from script? 2 Answers
Getting audio.PlayOneShot to work 2 Answers