- Home /
Button wont run sceneloader coroutine-calling functions, but can run it's other functions
explanation/overview: I have a scene loader script that requires buttons to call the functions. Each different scene has a button, where i manually dragged the prefab into the OnClick() object for the appropriate button in each scene. Even though the Sceneloader gameobject is singleton'ed, the buttons still call the non coroutine-starting functions, but if I try to make the buttons call the coroutine-calling functions, for the first scene, it will work for only the first scene and button. in other scenes, the buttons keep giving a "Coroutine couldn't be started because the the game object 'SceneLoader' is inactive! UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator) SceneLoader:FadeLoad () (at Assets/Scripts/SceneLoader.cs:84) UnityEngine.EventSystems.EventSystem:Update () ".
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Build.Content;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
private CanvasGroup canvasGroup;
void Awake()
{
canvasGroup = GetComponentInChildren<CanvasGroup>();
int sceneLoaderCount = FindObjectsOfType<SceneLoader>().Length;
if (sceneLoaderCount > 1)
{
Destroy(gameObject);
}
else
{
DontDestroyOnLoad(gameObject);
}
}
private void Start()
{
StartCoroutine(FadeIn(1));
}
// *** THIS WORKS NORMALLY, EVEN IF THE SCENE LOADER DOESNT HAVE A PREFAB IN EACH SCENE
public void LoadNextScene()
{
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
IEnumerator FadeOutLoadFadeIn(float time)
{
yield return FadeOut(time);
LoadNextScene();
Debug.Log("Fade in");
yield return FadeIn(time);
Debug.Log("Fade out");
}
IEnumerator FadeOut(float time)
{
while (canvasGroup.alpha < 1)
{
canvasGroup.alpha += Time.deltaTime / time;
yield return null;
}
//SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex +1);
}
IEnumerator FadeIn(float time)
{
while (canvasGroup.alpha > 0)
{
canvasGroup.alpha -= Time.deltaTime / time;
yield return null;
}
//SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex +1);
}
// ***I WANT THE BUTTONS TO CALL THIS, BUT IT DOESNT WORK***
public void FadeLoad()
{
StopCoroutine(FadeOutLoadFadeIn(1));
StartCoroutine(FadeOutLoadFadeIn(1));
}
}
Your answer
Follow this Question
Related Questions
Does the Singleton GameObject need to be in all scenes where i need to access it? 2 Answers
Coroutine does not work when scenes changes 1 Answer
Using Toolbox Singleton Script and Reloading Scene 2 Answers
How to create a main menu with singleton pattern? 2 Answers
Holding SceneManager.LoadSceneAsync until a button has been pressed? 1 Answer