- Home /
User helped me rethink the question, and when I did a Google search came up duplicate. I was asking the wrong question.
How to get Canvas to stop doubling itself when onclick back to main menu?
I have four canvas, one named Menu UI to hold everything, one for main menu panel, one for pause with inventory panels, and one for player UI. It seems easy to enable, and disable like this.
When I go into the pause menu and hit the return menu I can see in the hierarchy that there are 2 Main UIs . One at the the top and one at the bottom like its trying to load over the exiting ui canvases. The main ui 2 shows up and when you hit new game it goes through the fade image but then freezes at this point. How do I stop this from happening, or stop the second Main ui. Is it something else I'm not seeing? When it loads the menu scene it should go back to the first panel or main ui right? Or is there another way to getting back to the main menu without scenemanager. Loadscene back to zero. Is calling a loadscène what is making it double?
I am still quite new to scripting so please be kind. I feel its unnecessarily repetitive, didn't really knew how to go about this in the first place until I kept messing around to achieve some results. I mean it works, except for, the one part, but any tips to get better at bools && script would be well appreciated.
@NoseKills Don't destoy is the basic don't destroy put onto the Menu UI which holds all the other canvas, usually put all my scripts in this area, kinda like a gameobject to hold them all. Do you think I would need to need to put a destroy on load? So that when I press return to menu it destroys the first one allowing second to come up, and flow through?
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using UnityEngine.Audio;
public class MenuTransitions : MonoBehaviour {
public int sceneToStart;
public bool changeScenes;
public bool changeMusicOnStart;
public AnimationClip fadeColorAnimationClip;
public AnimationClip fadeColorAnimationClip2;
public Animator animColorFade;
private bool mainMenu;
private bool pauseMenu;
private bool playerUI;
private bool fadeImage;
private bool fadeImage2;
private AudioManager audioManager;
private float fastFadeIn = .01f;
private ShowNavMenu showNavMenu;
void Awake ()
{
showNavMenu = GetComponent<ShowNavMenu>();
audioManager = GetComponent<AudioManager>();
}
void Update ()
{
if ( Input.GetButtonDown ("Cancel") && !pauseMenu && !mainMenu && !fadeImage && !fadeImage2 && playerUI)
{
DoPause ();
showNavMenu.ShowPausePanel ();
showNavMenu.HideFadeImage();
showNavMenu.HideFadeImage2();
showNavMenu.HideMainMenuPanel();
showNavMenu.HidePlayerUIPanel();
}
else
{
if (Input.GetButtonDown ("Cancel") && pauseMenu && !mainMenu && !playerUI && !fadeImage && !fadeImage2)
{
UnPause ();
showNavMenu.ShowPlayerUIPanel();
showNavMenu.HidePausePanel ();
showNavMenu.HideMainMenuPanel();
showNavMenu.HideFadeImage();
showNavMenu.HideFadeImage2();
}
}
}
public void DoPause ()
{
pauseMenu = true;
Time.timeScale = 0;
showNavMenu.ShowPausePanel();
}
public void UnPause ()
{
pauseMenu = false;
Time.timeScale = 1;
showNavMenu.HidePausePanel();
}
public void MainMenu ()
{
if (mainMenu = true)
{
pauseMenu = false;
playerUI = false;
showNavMenu.ShowMainMenuPanel ();
showNavMenu.HideFadeImage();
showNavMenu.HideFadeImage2();
showNavMenu.HidePausePanel();
showNavMenu.HidePlayerUIPanel();
}
else
{
mainMenu = false;
}
}
public void StartButtonClicked()
{
if (changeMusicOnStart)
{
audioManager.FadeDown(fadeColorAnimationClip.length);
}
if (changeScenes)
{
Invoke ("LoadDelayed", fadeColorAnimationClip.length * .5f);
animColorFade.SetTrigger ("fade");
fadeImage = true;
showNavMenu.ShowFadeImage();
showNavMenu.HideMainMenuPanel();
showNavMenu.HideFadeImage2();
showNavMenu.HidePausePanel();
playerUI = true;
showNavMenu.ShowPlayerUIPanel();
}
}
public void LoadDelayed()
{
if(changeScenes)
{
mainMenu = false;
showNavMenu.HideMainMenuPanel();
fadeImage = true;
showNavMenu.ShowFadeImage();
SceneManager.LoadScene (sceneToStart = 1);
}
}
public void FadeImage()
{
if(fadeImage = true)
{
showNavMenu.ShowFadeImage();
showNavMenu.HideMainMenuPanel();
showNavMenu.HideFadeImage2();
showNavMenu.HidePausePanel();
}
else
{
if(fadeImage = false)
{
showNavMenu.HideFadeImage();
playerUI = true;
showNavMenu.ShowPlayerUIPanel();
}
}
}
public void PlayerUIPanel()
{
if (playerUI = true)
{
showNavMenu.ShowPlayerUIPanel ();
showNavMenu.HideMainMenuPanel();
showNavMenu.HideFadeImage2();
showNavMenu.HidePausePanel();
showNavMenu.HideFadeImage();
}
else
{
if (playerUI = false)
{
showNavMenu.HidePlayerUIPanel ();
}
}
}
public void ReturnToMainMenu()
{
fadeImage2 = true;
showNavMenu.ShowFadeImage2();
SceneManager.LoadScene(sceneToStart = 0);
}
public void FadeImage2()
{
if(fadeImage2 = true)
{
showNavMenu.ShowFadeImage2();
pauseMenu = false;
}
else
{
if(fadeImage2 = false)
{
showNavMenu.HideFadeImage2();
}
}
}
public void OnLevelWasLoaded()
{
if (changeMusicOnStart)
{
audioManager.PlayLevelMusic ();
fadeImage = false;
showNavMenu.HideFadeImage();
}
}
}
Alright, I'll have it up later this evening.
First suspects would be any Instantiate calls or DontDestroyOnLoad() combined with scene loading.
After re-reading your comment, I had to rethink the problem, reword my question, and then search google and found the answer. You are right it's the don't destroy on load. Thank you for your answer and helping. I appreciate it.
Follow this Question
Related Questions
How to get height of filled image ? 1 Answer
When i press play the buttons work, however, the buttons dont work on my iphone. 1 Answer
C# UI component overflaping another gameobject function 0 Answers
Physics.OverlapSphere not returning colliders. 0 Answers
How to trigger OnValueChange(Vector 2) method from code? 1 Answer