- Home /
Level Not Loading After Screen Fade
Hello everyone, I'm working on a school project and I can't get the level to reload after a screen fade. The level will do a fade but the level will not actually restart. Any ideas?
Here is the Screen Fader function:
using UnityEngine; using System.Collections;
public class ScreenFader : MonoBehaviour {
// Holds the texture to fill the screen
[SerializeField]Texture2D fadeTexture;
[SerializeField]Color colorStart = Color.black;
[SerializeField]Color colorEnd = Color.clear;
// Time to completion of dade
[SerializeField]float fadeTime = 1.0f;
// Internally used to track the passage of time
private float timer = 0.0f;
// Defines the type of function which is used as a
// delegate when the fade has completed.
public delegate void FadeCompleteEvent();
// The container for the function(s) to be triggered when
// the fade has completed
private event FadeCompleteEvent OnFadeComplete = null;
// Use this for initialization
void Start () {
}
// Called when the GUI is drawn
void OnGUI () {
// Determine the passage of time as a
// percentage of the duration time.
float percent = timer / fadeTime;
// Use the percentage to determine the
// gradient between the two
GUI.color = Color.Lerp (colorStart, colorEnd, percent);
// Create a rectangle the size of the screen
Rect screenRectangle = new Rect(0,0,Screen.width,Screen.height);
// Draw the texture filling the entire screen
GUI.DrawTexture(screenRectangle, fadeTexture);
}
// Loads a prefab and creates an instance from it
static public void CreateFade (string _prefabName,
FadeCompleteEvent _completeEvent) {
// Load the asset as a basic object
Object fadePrefab = Resources.Load (_prefabName, typeof(Object));
// Create a new game object from the loaded prefab
GameObject fadeObject = Instantiate (fadePrefab) as GameObject;
// Find the fader's script component and assign the event
ScreenFader fader = fadeObject.GetComponent<ScreenFader>();
fader.OnFadeComplete = _completeEvent;
}
// Update is called once per frame
void Update () {
// Accumulate the passage of time
timer += Time.fixedDeltaTime;
// Duration has been satisfied?
if (timer > fadeTime) {
timer = fadeTime;
}
if (OnFadeComplete != null) {
OnFadeComplete = null;
Destroy (gameObject, 0.1f);
}
}
}
Here is the script for the button that evokes the load level function when pressed:
using UnityEngine; using System.Collections;
public class PauseRestart : MenuButtonBase {
// Called on button up
protected override void doButtonAction () {
ScreenFader.CreateFade("ScreenFadeDown",FadeDownCompleted);
}
// Invoked when the fade completes
void FadeDownCompleted () {
Application.LoadLevel("Stewart_Tafari_Lab4");
}
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
Answer by SkaredCreations · Dec 18, 2014 at 10:50 PM
Instead of a common assignation for an event, I think you should use:
fader.OnFadeComplete += _completeEvent;
Your answer
Follow this Question
Related Questions
How can I store and load levels efficiently? 2 Answers
scene loader issue 0 Answers
restart level of car game 2 Answers
Storing in PlayerPref based on timer 1 Answer