Load Scene in Background and Load When a Button is Clicked
Hello, I'm having trouble with loading scenes in the background. I'm trying to set up my main menu so that when the game starts it loads the scene in the background without interrupting the main menu. Then, when a button is clicked the scene will either wait to be finished loading then activate, or activate immediately. The scene being loaded is the main game scene. I have some code I've written, but unity crashes every time a press play in the editor while the main menu scene is open.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading;
public class LoadSceneButton : MonoBehaviour
{
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
public string sceneToLoad;
public bool loadAsync = true;
public bool useSprites = false;
public Sprite buttonUp;
public Sprite buttonDown;
public Sprite buttonHovered;
AsyncOperation aO;
SpriteRenderer sR;
void Start()
{
sR = GetComponent<SpriteRenderer>();
if (useSprites)
{
sR.sprite = buttonUp;
}
if (loadAsync)
{
StartCoroutine(loadSceneAsync());
aO.allowSceneActivation = false;
}
}
private void OnMouseDown()
{
if (useSprites)
{
sR.sprite = buttonDown;
}
}
private void OnMouseExit()
{
if (useSprites)
{
sR.sprite = buttonUp;
}
}
public void OnMouseEnter()
{
if (useSprites)
{
sR.sprite = buttonHovered;
}
}
private void OnMouseUpAsButton()
{
if (loadAsync)
{
aO.allowSceneActivation = true;
}
else
{
UnityEngine.SceneManagement.SceneManager.LoadScene(sceneToLoad);
}
}
private IEnumerator loadSceneAsync()
{
aO = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(sceneToLoad, UnityEngine.SceneManagement.LoadSceneMode.Additive);
while(!aO.isDone)
{
yield return null;
}
}
}
Thank you for the help!
Comment
Your answer
Follow this Question
Related Questions
Async Level loading issue. 0 Answers
Load level async 1 Answer
How do I preload multiple scenes? 0 Answers