First scene loads twice
I'm slowly going insane trying to get my head around the SceneManager.
I have a small basic unity game with a total of 6 scenes. The build order is as follows;
0- MainMenu // Click NewGame to start Level_01.
1- Level_01
2- Level_02
3- Level_03
4- YouWin // This should trigger when player completes last level.
5- YouLose // This triggers when player runs out of time.
However when playing, the scenes load in this order;
0- MainMenu
1- Level_01
2- Level_01 // Repeats Level_01
3 - Level_02
4- YouWin // Never reaches Level_03
I have checked and double checked the build order and that does not appear to be the problem. I am relatively new to unity and coding in general and I have been trying to fix this for days and seem to be getting nowhere. Any help would be appreciated.
Here is the GameManager code:
public class GameManager: MonoBehaviour{
//count
public static int currentScore;
public static int highscore;
public static int currentLevel;
//timer
public float startTime;
private string currentTime;
void Update()
{
startTime -= Time.deltaTime;
currentTime = string.Format("{0:0.0}", startTime);
if (startTime <= 0)
{
startTime = 0;
//this loads the time out screen if timer reaches 0
SceneManager.LoadScene(5);
}
}
public static void CompleteLevel()
{
if (currentLevel < 4)
{
//this loads levels in sequence
SceneManager.LoadScene(currentLevel += 1);
} else {
//this is the win settings
SceneManager.LoadScene(4);
print("You win");
}
}
This is the MainMenu code:
public class MainMenu3 : MonoBehaviour{
// Loads the levels from clicking (needed for both MainMenu and YouLose scenes)
public void LoadScene(string name) {
SceneManager.LoadScene(name); }
//this quits the game
public void QuitGame() {
Application.Quit();
}
This is code for triggering next scene when reaching goal:
public class PlayerController2 : MonoBehaviour{
//player
private Rigidbody rb;
void Start ()
{
rb = GetComponent<Rigidbody>();
}
void OnTriggerEnter (Collider other)
{
if (other.transform.tag == "Goal")
{
GameManager.CompleteLevel();
}
}
Any help at all would be hugely appreciated! Thanks for reading.
*Edit: cleaned up code to make it easier to read
Answer by Shire_ · Apr 20, 2016 at 03:01 PM
FIXED!
finally found a fix in the end!
needed to use:
if (currentLevel < 4) { currentLevel = SceneManager.GetActiveScene().buildIndex+1; SceneManager.LoadScene(currentLevel); }
Your answer
Follow this Question
Related Questions
Save timer score between scenes? (C#) 5 Answers
Synchronize scene loading networking 1 Answer
Application.LoadLevel is Extremly slow 0 Answers
Application.LoadLevel crashes unity 0 Answers