Search Unity

Please help me with my disappearing Music Player UI when switching scenes.

Discussion in 'UGUI & TextMesh Pro' started by ASWilburn, Feb 20, 2021.

  1. ASWilburn

    ASWilburn

    Joined:
    Apr 5, 2019
    Posts:
    4
    So I've been trying to figure this out for a few days now and I keep running in circles with all the fixes I try. So I figure I'd ask for help.

    I have this simple Music player that I coded, it looks like this:
    Player normal.PNG

    Everything on it loads fine. I'm able to load the title screen of my game and go into the options menu where the player is located. I have full functionality with it. I am able to skip tracks like I want to and go back to the main menu and load up the main game scene no problem. The issue is once I reach the Game Over screen and head back into the option menu to change the song I'm created with this player instead:
    player error.PNG

    I've been reading a lot of things on coding and what not and am just at a loss. I have this simple don't destroy script:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class DontDestroy : MonoBehaviour {

    public GameObject rootCanvas;

    void Awake()
    {
    if(rootCanvas != null)
    DontDestroyOnLoad(rootCanvas);
    }
    void Start() {

    }
    }

    It's allowed me to keep the audio source object and UI for the player. The inspector shows it keeps the instance of the both objects as it changes scene. But once back in the options I am greeted with the broken player.

    So is there anything anyone can suggest. I've seen suggestions of making a scene strictly for the UI and have it last as a consistent scene throughout all of the seasons but I'm not too sure about how to go about setting that up.

    Any help would be greatly appreciated. Thank you.
     
  2. Nexer8

    Nexer8

    Joined:
    Dec 10, 2017
    Posts:
    271
    UI breaks on domain/scene reload. You need to re-create it in OnEnable.
     
  3. ASWilburn

    ASWilburn

    Joined:
    Apr 5, 2019
    Posts:
    4
    I don't suppose you have a good example of this?

    Would I just add the method to the DontDestroy script I provided, something like this? (Edit is in purple tex)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class DontDestroy : MonoBehaviour {

    public GameObject rootCanvas;

    void Awake()
    {
    if(rootCanvas != null)
    DontDestroyOnLoad(rootCanvas);
    }

    void OnEnable() {

    }


    void Start() {

    }
    }

    Or could I simple create a new script that has a game object that I can drag my UI element into?''

    I've been playing around with the code for a couple hours now and I still can't get it to do what I want.

    Thank you again for the help. It's been too long since I've had a formal coding class and learning C# has been a bit challenging to say the least.
     
  4. ASWilburn

    ASWilburn

    Joined:
    Apr 5, 2019
    Posts:
    4
    Sorry, I'm going to bump this. I hope that's okay, still trying to get a more detailed response. Thank you.

    EDIT:

    So after a few more hours of playing I've figured out that I had my music player script set to static so it wasn't keeping the information through the scene changes.

    I now have a different issue. I can reload the scene with a function player but now I'm getting duplicate audio of the song and the music player shows the title of the new instance of the song and not the one that was playing before. Hierarchy is showing both instances of the audio source and music player.
     
    Last edited: Mar 6, 2021