- Home /
How I can prevent music from stopping after changing a scene?
When I change scene, the music stops, how can i make it continue?
I'm not sure because I haven't done it but whatever gameobject you have playing the sound you would probably set as don't DestroyOnLoad.
Answer by Noah-1 · Oct 18, 2012 at 02:35 PM
HI, as @Mrobertson said, you should use dontDestroyOnLoad in the object where your AudioSource is attached.Just add something like this in your script:
function Awake () {
DontDestroyOnLoad (transform.gameObject);
}
Hope it helps.
Answer by Argylelabcoat · Oct 18, 2012 at 06:18 PM
I personally like to use the async functions for loading scenes, they let you display loading graphics/loading sounds without hiccups:
As Mrobertson stated, you can have your playback system to DontDestroyOnLoad, another option is to use additive scenes and keep pieces you want to delete as children beneath nicely named game objects so that you can say `GameObject.Destroy(GameObject.Find("Level2-Enemies"))` or something along said lines.
Answer by AlucardJay · Oct 18, 2012 at 09:48 PM
When this question comes up, DontDestroyOnLoad is the answer given, but it is only half the solution. For example, if you load the scene where the music player is created, then a duplicate is made, now you have 2 players following you through all the scenes. It took me a while to find the solution, but the answer is to use a Singleton . Search singletons on this 'site (or in google search "unity singleton") as there would be better explanations than what I could give.
The simple version is : only one instance of a singleton exists at a time, two cannot exist. It can be called by all scripts by using a static variable. So only one, and it has a variable which other scripts can reference.
Here is the script for a working singleton, just attach it to the music player. Note : this is in unity JS, and the script must be called MusicSingleton :
#pragma strict
// change the class name here to the name of your script, e.g.
// public class ThisIsTheScriptNameHere extends MonoBehaviour
public class MusicSingleton extends MonoBehaviour
{
private static var instance : MusicSingleton;
function Awake()
{
if (instance != null && instance != this)
{
Destroy( this.gameObject );
return;
}
else
{
instance = this;
}
DontDestroyOnLoad( this.gameObject );
}
// also change this to your script name
// public static function GetInstance() : ThisIsTheScriptNameHere
public static function GetInstance() : MusicSingleton
{
return instance;
}
function Update()
{
//
}
}
Your answer
Follow this Question
Related Questions
Why sound doesn't stop? 2 Answers
Playing Music Problem. 2 Answers
Make a command run only once 1 Answer
Ambisonic Audio working on PC but not Android 3 Answers
Loading music for initial scene loading takes a very long time 1 Answer