0
\$\begingroup\$

I can't find working solution for this problem anywhere. Here is what I'm trying to do:

My Android game contains 10+ levels, user quits game on level 2. Next time user starts game it load level 2 automatically. Thats all I want, no need to save objects, just load last scene. I prefer simple javascript, but examples on the unity tutorials confuse me. Thanks for answers.

\$\endgroup\$
0

2 Answers 2

1
\$\begingroup\$

When player quit from game you should save current level number so when player will come again in game should load last current level.

when player finish current level save next level number so when player quit and run game again loaded next level.

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class LevelManager : MonoBehaviour {
    public enum Situation{None,Exit,Lose,Win
    };
    public Situation mycase;

    // Use this for initialization
    void Start () {
        Application.LoadLevel (PlayerPrefs.GetInt("Level"));
    }

    // Update is called once per frame
    void Update () {
        int LevelNumber = SceneManager.GetActiveScene ().buildIndex;
        switch(mycase){
        case Situation.Exit:
            PlayerPrefs.SetInt ("Level", LevelNumber); //Save Level number
            Application.Quit ();
            mycase = Situtation.None;
            break;
        case Situation.Lose:
            Application.LoadLevel(Application.loadedLevel);//Reset Level
            mycase = Situtation.None;
            break;
        case Situation.Win:
            PlayerPrefs.SetInt ("Level", LevelNumber + 1); //Save Level next number
            Application.LoadLevel (LevelNumber + 1); //Load NextLevel
            mycase = Situtation.None;
            break;
        }
    }
}
\$\endgroup\$
5
  • \$\begingroup\$ I have no idea how to use it or it doesn't work. I add this to an empty object and level 1 loads every 5 seconds. \$\endgroup\$ Commented Jul 31, 2016 at 18:41
  • \$\begingroup\$ What those tick boxes are for? \$\endgroup\$ Commented Jul 31, 2016 at 18:50
  • \$\begingroup\$ because you should add scenes from File > BuildSetting >>Add Open scene.I use tick boxes for check condition this is mean when condition is true for example if Lose is true Reset Level \$\endgroup\$ Commented Jul 31, 2016 at 18:51
  • \$\begingroup\$ All the scenes are add. I appreciate your work man, and would like to get this working. Because now it just glitches out. Should I add this to all scenes or one is enough? \$\endgroup\$ Commented Jul 31, 2016 at 18:53
  • 2
    \$\begingroup\$ Using boolean flags for chain if else checking is not a good practice. Use an Enum instead. \$\endgroup\$ Commented Jul 31, 2016 at 19:02
0
\$\begingroup\$

In your case you need just one interger value be saved and loaded.

In your scene load method, use these lines. Put your first game scene index instead of 2.

if (PlayerPrefs.GetInt ("current_level") == null)
{
PlayerPrefs.SetInt ("current_level", 2);//assuming level 0 is splash screen, level 1 is main menu and level 2 is first scene. Change as your need
}
Application.LoadLevel(PlayerPrefs.GetInt ("current_level"));

On every scene use the below method in an active object.

void OnApplicationQuit()
{
PlayerPrefs.SetInt ("current_level", Application.loadedLevel);
}

PlayerPrefs is not suggested in large scale data handling. Use binaryformatter, xmlserializer etc for that purposes. You will get more control over data.

If you are not using Application.Quit () for game exit then use it. Or you can put the line in OnApplicationQuit () to Start () on an active object in all scene. That way even if you don't quit the game, just going into the scene will be saved.

Switch to JS to see how to write JS function which is written in C#

\$\endgroup\$
5
  • \$\begingroup\$ Scene 1 keeps reloading :/ \$\endgroup\$ Commented Jul 31, 2016 at 19:13
  • \$\begingroup\$ You used the second method in all scenes? \$\endgroup\$ Commented Jul 31, 2016 at 19:25
  • \$\begingroup\$ I put the first one method in first scene and the second method in every other scene. It get's stuck on scene 1. My all other scripts are in js. \$\endgroup\$ Commented Jul 31, 2016 at 19:45
  • \$\begingroup\$ It's almost same in js, I assume you know how to covert the small thing that's not same. Are you quitting the scene with Application.Quit (); ? \$\endgroup\$ Commented Jul 31, 2016 at 19:50
  • \$\begingroup\$ I'm not using Application.Quit (); and i don't know how to convert this code to js. \$\endgroup\$ Commented Aug 1, 2016 at 7:55

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.