unity-game-engineloadunityscriptscene

How do I load previous scene on unity3d


I have a total of five levels in the build setting . I need to load. When the player dies . The scene switch to restart scene. I have the restart scene code . So it only restart the current scene. I don't want it to do that. I need to reload the previous . I need to do same with the other levels . Here is my code :

{



#pragma strict

import UnityEngine.SceneManagement;

@script AddComponentMenu ("EGUI/UI_Elements/Button")

// public class EGUI_Button extends EGUI_Element {}

// List of built-in functionality types
public enum ButtonAction 
{
    None,                   // Do nothing
    Custom,                 // Call function (name in callFunction) with parameter for actionRecipient object (this gameObject is default)
    LoadLevel,              // Load level with index/name in parameter
    RestartLevel,           // Restart current level
    ExitGame,               // Close application
    SetQuality,             // Set quality level according to parameter (Fastest, Fast, ... Fantastic)
    DecQuality,             // Decrease quality level 
    IncQuality,             // Increase quality level  
    SetResolution,          // Set screen resolution according to parameter (1024x768, 1920x1080 ... etc)
    OpenURL,                // Open URL specified in parameter
    CloseEverything,        // Close/disable whole GUI manager and all related GUI-elements. 
    Resume,                 // Close parent GUI-element and set time-scale to 1
    ShowAnother,            // Show GUI-element specified in actionRecipient
    ShowPrevious,           // Show previous GUI-element
    HideThis,               // Hide parent GUI-element  
    HideThis_ShowAnother,   // Hide parent GUI-element and show window specified in actionRecipient
    HideThis_ShowPrevious,  // Hide parent GUI-element and show previous window
    SoundSwitch,            // Enable/Disable all sounds in the scene
    LoadPreviousLevel,      // Load the previous level if there is one else load load the current one
};

var onClickAction: ButtonAction;    // Action preset to perform onClick
var actionRecipient: GameObject;    // Optional link to action recipient object
var callFunction: String;           // Optional name of custom function to call
var parameter: String;              // Optional parameter to send/use in the Action

//=====================================================================================================
// Overload parent OnClick function to Perform built-in actions
function OnClick () 
{
//     super.OnClick();
    PerformAction ();
}

//----------------------------------------------------------------------------------------------------
// Perform built-in actions according to selected type (onClickAction)
function PerformAction () 
{
    switch (onClickAction)
    {
        case ButtonAction.None:
            break;
        case ButtonAction.Custom:
            if(!actionRecipient)
                actionRecipient = gameObject;
            if(parameter.Length > 0)
                actionRecipient.SendMessage (callFunction, parameter, SendMessageOptions.DontRequireReceiver);
            else
                actionRecipient.SendMessage (callFunction, SendMessageOptions.DontRequireReceiver);
            break;
        case ButtonAction.LoadLevel:
            Time.timeScale = 1;
            try
                SceneManager.LoadScene(int.Parse(parameter));
            catch(error)
                SceneManager.LoadScene(parameter);
            break;

        case ButtonAction.RestartLevel: 
            Time.timeScale = 1;
            SceneManager.LoadScene(SceneManager.GetActiveScene().name);
            break;
        case ButtonAction.LoadPreviousLevel: 
            Time.timeScale = 1;
            if (SceneManager.GetActiveScene().buildIndex > 0) // if not the first scene load the prvious scene
                SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);
            else
                SceneManager.LoadScene(0);
            break;
    }
}

case ButtonAction.ExitGame: 
            Application.Quit();
        break; 


      case ButtonAction.SetQuality: 
          switch (parameter)
            {
                case "Fastest":
                 QualitySettings.SetQualityLevel(QualityLevel.Fastest);
                break;

                case "Fast":
                 QualitySettings.SetQualityLevel(QualityLevel.Fast);
                break;

                case "Simple":
                 QualitySettings.SetQualityLevel(QualityLevel.Simple);
                break;

                case "Good":
                 QualitySettings.SetQualityLevel(QualityLevel.Good);
                break;


                case "Beautiful":
                 QualitySettings.SetQualityLevel(QualityLevel.Beautiful);
                break;


                case "Fantastic":
                 QualitySettings.SetQualityLevel(QualityLevel.Fantastic);
                break;
           }
        break;  


      case ButtonAction.IncQuality: 
          QualitySettings.IncreaseLevel();
      break; 


      case ButtonAction.DecQuality: 
          QualitySettings.DecreaseLevel();
        break; 


      case ButtonAction.SetResolution: 
         Screen.SetResolution ( int.Parse(parameter.Substring(0,parameter.IndexOf("x"))),  int.Parse(parameter.Substring(parameter.IndexOf("x")+1)), Screen.fullScreen);
        break;


      case ButtonAction.OpenURL: 
            Application.OpenURL(parameter);
        break;               


      case ButtonAction.CloseEverything: 
          GetGUIManager().gameObject.SetActive(false);
        break;                                                                                                                                                                                                                                                                      


      case ButtonAction.Resume: 
          Time.timeScale = 1;
          transform.parent.gameObject.SendMessage("Disable");
        break; 


      case ButtonAction.ShowAnother:
          if(actionRecipient) actionRecipient.GetComponent(EGUI_Element).SetActivation(true, transform.parent.gameObject);
        break; 


      case ButtonAction.ShowPrevious:
         if(senderObject) senderObject.SetActive(true);
        break; 


      case ButtonAction.HideThis:
          transform.parent.gameObject.SendMessage("Disable");
        break; 


      case ButtonAction.HideThis_ShowAnother:
          if(actionRecipient) actionRecipient.GetComponent(EGUI_Element).SetActivation(true, transform.parent.gameObject);
          transform.parent.gameObject.SendMessage("Disable");
        break; 


      case ButtonAction.HideThis_ShowPrevious:
          if(senderObject) senderObject.SetActive(true);
          transform.parent.gameObject.SendMessage("Disable");
        break; 


      case ButtonAction.SoundSwitch:
          if(actionRecipient) actionRecipient.GetComponent(AudioListener).enabled = !actionRecipient.GetComponent(AudioListener).enabled;
        break; 

    }
}


//----------------------------------------------------------------------------------------------------


}

Solution

  • Firstly,

    Application.LoadLevel & Application.loadedLevel are obsolete.

    See:

    Application.LoadLevel Reference

    Application.loadedLevel Reference

    Instead, Unity recommends you use the SceneManager class in the Scene Management API.

    My recommendation would be to do something like this in order to reload a current scene:

    // reload the current scene
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    
    // load the previous scene
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex - 1);