- Home /
I'm trying to toggle my in-game menu.
I created an in-game menu. That menu can be toggled with UI buttons.
Now I want to make it possible to press the button 'esc' to open the menu and press it again to close it.
The problem is, that it wants to open the menu, but not close it.
The solution might be simple, but I can't seem to solve it.
Maybe I'm just thinking too complicated...
Here is my code/script:
public bool paused = false;
void Update()
{
if (!paused && Input.GetKey(KeyCode.Escape))
{
Debug.Log("You have paused the game.");
paused = true;
PauseGame();
}
else if (paused && Input.GetKeyUp(KeyCode.Escape))
{
Debug.Log("You have continued the game");
paused = !paused;
ResumeGame();
}
}
public void PauseGame()
{
buttonSound.Play();
Time.timeScale = 0f;
thePauseMenu.SetActive(true);
thePauseButton.SetActive(false);
}
public void ResumeGame()
{
buttonSound.Play();
Time.timeScale = 1f;
thePauseMenu.SetActive(false);
thePauseButton.SetActive(true);
}
Could you rephrase "The problem is, that it wants to open the menu, but not close it." plz? I don't understand it much. As I see the code, it should open the menu only when the button is held down. Is this what's happening?
Line 15, Have you tried doing paused = false; ?
And have you tested holding down the escape button for awhile then release it? What happens when you do that?
What happens if you do this?
if (!paused && Input.Get$$anonymous$$ey($$anonymous$$eyCode.Escape))
{
Debug.Log("You have paused the game.");
paused = true;
PauseGame();
}
else
{
Debug.Log("You have continued the game");
paused = !paused;
ResumeGame();
}
It should keep on switching from pause to resume and back again since its in the update.
Answer by tarekhfahmi · Nov 16, 2017 at 09:52 AM
Youre going to want to start off by making sure that this button and the everything youre trying to activate and deactivate is attached to the same canvas. Call this canvas "PauseMenu" Next create a script and call it PauseController :
using UnityEngine;
using System.Collections;
public class PauseGame : MonoBehaviour {
public Transform canvas;
// Update is called once per frame
void Update () {
if (Input.GetKeyDown(KeyCode.Escape))
{
Pause();
}
}
public void Pause()
{
if (canvas.gameObject.activeInHierarchy == false)
{
canvas.gameObject.SetActive(true);
Time.timeScale = 0;
}
else
{
canvas.gameObject.SetActive(false);
Time.timeScale = 1;
}
}
}
Now create an empty game object and call that too PauseController. Add the script to it. Now go to the game object and select the pause canvas.
Your answer
Follow this Question
Related Questions
UI Button should stay highlighted on click 2 Answers
Toggle Button Question 0 Answers
GUI.Button Toggling Error 1 Answer
Toggle Button State On/Off 2 Answers
Is there a method to create toggle group behavior for standard buttons 1 Answer