- Home /
Issues with Calling From Main Thread
Hello!
I'm working on a script that handles the meat of my saves in my game. I want the user to be able to click a button in the pause menu to save the game, and have the script load a GUI Canvas saying "No Save Data Found", or load the saved level string. When I run the function however, it gives me this error:
ArgumentException: INTERNAL_CALL_GetActiveScene can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
INTERNAL_CALL_GetActiveScene can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
I'm not really sure what's happening, or what I can do to fix it. If anyone can figure out a fix, that would be awesome!
Script (Sample):
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class SaveAndLoad : MonoBehaviour {
Scene myscene = SceneManager.GetActiveScene();
public string LoadChecker = "false";
public void LoadSavedGame() {
LoadChecker = PlayerPrefs.GetString("LoadChecker");
if (LoadChecker == null) {
Debug.Log("No Save Data Available To Load From");
} else {
SceneManager.LoadScene(PlayerPrefs.GetString("LoadString"));
}
}
public void SaveLevelData() {
if (myscene.name == "level1") {
PlayerPrefs.SetString("LoadString", myscene.name);
LoadChecker = "true";
PlayerPrefs.SetString("LoadChecker", LoadChecker);
PlayerPrefs.Save();
Debug.Log("Working");
}
if (myscene.name == "level2") {
PlayerPrefs.SetString("LoadString", myscene.name);
LoadChecker = "true";
PlayerPrefs.SetString("LoadChecker", LoadChecker);
PlayerPrefs.Save();
}
}
}
Answer by Kurdle_4855 · Apr 15, 2016 at 04:42 AM
Set your 'myscene' variable in Start instead of outside. Example:
Scene myscene;
void Start()
{
myscene = SceneManager.GetActiveScene();
}
That should fix it. :)
Answer by Bunny83 · Apr 15, 2016 at 03:55 AM
Well, just as the error said:
Constructors and field initializers will be executed from the loading thread when loading a scene.
In this line:
Scene myscene = SceneManager.GetActiveScene();
you call SceneManager.GetActiveScene()
inside the field initializer. You should call it inside a method instead. So either call it in "Awake" or directly inside your SaveLevelData method.
Scene myscene;
void Awake()
{
myscene = SceneManager.GetActiveScene();
}
Your answer
Follow this Question
Related Questions
GetInt can only be called from the main thread on Android 0 Answers
Load And Saving player prefs -1 Answers
Can someone tell me what is wrong with this? 2 Answers
How to load a scene with playerprefs from a ui element 1 Answer
Save and Load Instantiate Enemies 2 Answers