Scene Loading: Extremely RAM usage and Long Scene Loading Time (4mins).
Hi guys, I am almost done with my project, but I am running into a major snag. When I try to use SceneManager.LoadSceneAsync("stageName") from an almost "EMPTY" (one script) game scene, it takes a Ridiculous amount of time and RAM to load one of my game scenes.
This doesn't happen when I just load stages via the editor, it has a quick load time and no excessive RAM use. I don't have a lot going on in them. I just use a Master Script Obj that holds all my scripts (Game Manager, Music Manager, and Special Modes) to find and reference all the UI objects and components so I don't have to manually place them in (I have 90+ stages).
I have MP3 and Wav audio, but I made sure I placed them in the Resources folder and ensured that changed the option from Decompress on load to Streaming and Vorbis Compression. I have tried flushing the memory with an empty game scene but that doesn't work either. I am stuck guys... Below is a "small" example of my GameManager script.
using UnityEngine;
using System.Collections;
using System.Diagnostics;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour {
private ButtonScript buttonScript;
private EnemySpawnManager spawnManager;
private SlowMotion sloMo;
private GameObject camParentObj;
public Button vibrateButton;
private Camera theCamera;
public int selectedBoss;
public int enemyCounter;
public int startingEnemyCount;
private int pauseChkNum; //if 0 pause is off. if 1 pause is on.
private int theChosenView;
private int togglechkNum;
private float[] viewSizes = new float[3];
private float[] cameraViewYPos = new float[3]; //used to adjust screen upon changing camera view.
private float fxVal;
private float musicVal;
public Image pauseMenu;
public Text enemynumTxtBox;
public Button[] viewButtons;
public GameObject SettingsMenu;
public GameObject PauseCanvas;
public GameObject[] onOffText;
public AudioSource theMusicAudioComponent;
public AudioSource soundFxPlayer;
//private BossBehaviorScript BBS;
private bool _settingsIsActive;
public bool _startBossSpawnMinions = false; //used to keep track of when to to start the boss moving again.
public bool _ispaused = false;
void Start(){
//Stopwatch sw = new Stopwatch();
//sw.Start();
onOffText = new GameObject[2];
onOffText[0] = GameObject.FindGameObjectWithTag("ONTXT");
onOffText[1] = GameObject.FindGameObjectWithTag("OFFTXT");
vibrateButton =
GameObject.FindGameObjectWithTag("VibrateToggleButton").GetComponent<Button>();
cameraViewYPos[0] = -.77f;
cameraViewYPos[1]= -.41f;
cameraViewYPos[2]= -.11f;
viewButtons = new Button[3];
viewButtons[0] = GameObject.FindGameObjectWithTag("CloseView").GetComponent<Button>();
viewButtons[1] = GameObject.FindGameObjectWithTag("RegView").GetComponent<Button>();
viewButtons[2] = GameObject.FindGameObjectWithTag("WideView").GetComponent<Button>();
viewSizes[0] = 3.3f;
viewSizes[1] = 4f;
viewSizes[2] = 4.7f;
theCamera = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
camParentObj = GameObject.FindGameObjectWithTag("CameraContainer");
//spawnManager = FindObjectOfType<EnemySpawnManager>();
buttonScript = FindObjectOfType<ButtonScript>();
//BBS = FindObjectOfType<BossBehaviorScript>();
sloMo = GetComponent<SlowMotion>();
enemynumTxtBox = GameObject.FindGameObjectWithTag("EnemyCounter").GetComponent<Text>();
SettingsMenu = GameObject.FindGameObjectWithTag("SettingsCanvas");
PauseCanvas = GameObject.FindGameObjectWithTag("PauseCanvas");
theMusicAudioComponent =
GameObject.FindGameObjectWithTag("MusicManager").GetComponent<AudioSource>();
soundFxPlayer =
GameObject.FindGameObjectWithTag("AudioSoundFx").GetComponent<AudioSource>();
togglechkNum = PlayerPrefs.GetInt("ToggleOn");
theChosenView = PlayerPrefs.GetInt("selectedview");
musicVal = PlayerPrefs.GetFloat("MusicSettings");
fxVal = PlayerPrefs.GetFloat("FxSettings");
//enemyCounter = startingEnemyCount;
MusicValue(musicVal);
FxValue(fxVal);
enemyCounter = 0;
enemynumTxtBox.text = "0" + enemyCounter;
SetUserCamPos(theChosenView); //Set the cam position.
SettingsMenu.SetActive(false);
PauseCanvas.SetActive(false);
//sw.Stop();
//print("GMS Start Time" + ((float)sw.ElapsedMilliseconds / 1000f));
}
// Update is called once per frame
void Update () {
if(_startBossSpawnMinions){
CheckMinionAmounts();
}
}
Answer by ExcellS23 · Apr 26, 2017 at 10:42 AM
Figured it out by myself... It had absolutely nothing to do with my script.. It was related to the asset dependencies of the scenes. I had a prefab that had MANY references to sprites that were related to animations that I didn't not need on that particular level. I also lowered the texture sizes of some of my sprites because they were ridiculous (some were 20-30mb a piece). After making these changes, my load time went from 4 mins(and/or a auto system reboot) to 10 "SECONDS". I had someone try to charge me $1400 to fix something this simple... Main lesson, believe in your self, keep learning and keep Tinkering!!!
Your answer
Follow this Question
Related Questions
Loading new scene in unity 2D 0 Answers
SteamVR_LoadLevel() freezes when done loading in builds only 1 Answer
Objects don't instantiate after level reload. 0 Answers
OPEN WORLD GAME QUESTION 2 Answers
First scene loads twice 1 Answer