noobprogrammer1337
noobprogrammer1337

Reputation: 75

How to resume game after pressing back in menu

Hey I am trying to make a pause menu in my game. When escape is pressed pause game go to menu, but now I want to be able to press back in menu and resume my game. So far I can only pause game and cant press back. Also if i press Play in menu it starts at my tutorial scene and not the current scene. Is there a smart way to do this? Without resetting my game.

`using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class MenuScript : MonoBehaviour
{

    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.Escape))
        {
            if (Time.timeScale == 0)
            {
                Time.timeScale = 1;
            }
            else
            {
                Time.timeScale = 0;
            }
            SceneManager.LoadScene("Menu");




        }

    }
}`

Upvotes: 3

Views: 450

Answers (2)

Mastro
Mastro

Reputation: 1497

Depending on what you need, this would work as well.

private bool _isPaused;

private void Update(){

      if (Input.GetKeyUp(KeyCode.Escape))
            {
                _isPaused = !_isPaused;

                if (_isPaused)
                {
                    //Do Pause Logic here
                }
                else
                {
                    //Do Unpause Logic Here      
                }
            }
}

Upvotes: 0

Cabrra
Cabrra

Reputation: 644

I get that this isn't straightforward problem since you seem new to Unity.

You got the idea correctly, changing the time scale will freeze all agents on the scene. HOWEVER, if you load a new scene you'll need to reload the game scene - losing any data you had (and that is not what you want). My advice is creating an overlay element (UI) on the game scene and just show/hide it. There are multiple tutorials online use this as an starting point. Let me know if you require more help.

code sample

// Update is called once per frame
void Update()
{
  if (Input.GetKey(KeyCode.Escape))
  {
    if (Time.timeScale == 0)
    {
        Time.timeScale = 1;
        pauseMenu.gameObject.setActive(true);
    }
    else
    {
        Time.timeScale = 0;
        pauseMenu.gameObject.setActive(false);
     }
  }
}

You will need a reference to the pauseMenu game object attached on this script using the Unity editor.

Upvotes: 3

Related Questions