- Home /
 
Need help getting the screen to fade.
I'm trying to get the screen to darken when I start the game and when I restart. I have followed a tutorial for this but was not very clear.
 public class ScreenFader : MonoBehaviour {
     
     // Holds the texutre to fill the screen
     [SerializeField] Texture2D fadeTexture;
     [SerializeField] Color colorStart = Color.black;
     [SerializeField] Color colorEnd = Color.clear;
 
     
 
     // Time to completion to fade
     [SerializeField]float fadeTime = 1.0f;
 
     // The container for the functions to be triggered when the fade has complete
     private event FadeCompleteEvent OnFadeComplete = null;
 
     // Defines the type of function which is used as a delegate
     public delegate void FadeCompleteEvent();
 
     // Internally used to track the passage of time
     private float timer = 0.0f;
     
     // Loads a prefab and create 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 an assign the event
     ScreenFader fader = fadeObject.GetComponent<ScreenFader>();
     fader.OnFadeComplete = _completeEvent;
 
     }
     
     // Use this for initialization
     void Start () {
     
     }
     
     // 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(); 
             OnFadeComplete = null;
             Destroy(gameObject, 0.1f);           
         }
     }
     void OnGui() { 
       // Determine the passage of time as
       // a precentage of the duration time
         float percent = timer / fadeTime;
       
       // Use the percentage to the 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);
 
     }
 
   }
 
               public class CoreGame : MonoBehaviour {
 [SerializeField] GameObject pauseMenu;
 
               // Stores the current pause state; private bool paused = false;
 // Use this for initialization
 void Start () {
     ScreenFader.CreateFade("ScreenFadeUp", FadeUpCompleted);
     // Hide the pause menu intitially
     HandlePause(false);
 }
 
 // Update is called once per frame
 void Update () {
     // Exit early if paused
     if (paused)
     {
         return;
     }
     
     CheckInput();
     
     
 }
 static public void MakeChild(GameObject _child) { 
 
     GameObject coreGameObj = GameObject.Find("CoreGame");
     // Assign the child's transform's parent to the
     // recently found core game's transform
     _child.transform.parent = coreGameObj.transform;
 
 }
 void CheckInput()
 {
     // User has pressed pause?
     if (Input.GetKeyUp(KeyCode.P))
     {
         HandlePause(!paused);
     }
 }
 // Method to modify pause status
 private void SetPaused(bool _paused)
 {
     paused = _paused;
 }
 void FadeUpCompleted() {
     Debug.Log("Fade UP has completed!");
 }
 
 // Handles the actions of the pause event
 public void HandlePause(bool _pause) {
     
     paused = _pause;
      // Send a message to all children
         BroadcastMessage("SetPaused", paused);
         paused = !paused;
         Debug.Log("Pause Key has been pressed!");
         if (paused)
         {
             Time.timeScale = 0;
         }
         else
         {
             Time.timeScale = 1;
         }
         pauseMenu.SetActive(paused);
     }
 
 
               }
public class PauseResume : MenuButtonBase {
 // reference to the core game object
 public CoreGame coreGame;
 // Call on button up
 protected override void doButtonAction()
 {
     coreGame.HandlePause(false);
 }
 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 }
 
               }
public class PauseRestart : MenuButtonBase {
 // Called on button up
 protected override void doButtonAction()
 {
     ScreenFader.CreateFade("ScreenFadeDown", FadeDownCompleted);
 }
 
 // Use this for initialization
 void Start () {
 
 }
 
 // Update is called once per frame
 void Update () {
 
 }
 void FadeDownCompleted() {
     Application.LoadLevel("Project");
 }
 
               }
This may help with your first issue, it is js but it does work so maybe it can help you a little, ignore the player prefs bit.link text
I was able to fix my second issue but I'm still having trouble with the screen fade. The only error I can find was this \Scripts\ScreenFader.cs(7,29): warning CS0649: Field 'ScreenFader.fadeTexture' is never assigned to, and will always have its default value null.
I already have a game object in a prefab folder that contains the fadeTexture and it is cloned in the hierarchy whenever I start the game.
Answer by TheShadyColombian · Oct 22, 2014 at 01:34 AM
try adding a GUI image that is black and animate it to change the alpha value, and make the script that changes the scene change the animation. contact me if you need more info, am i very happy to help!
Answer by DanielB89 · Oct 22, 2014 at 07:44 PM
I was able to fix it. OnFadeComplete = null; and Destroy(gameObject, 0.1f); where both inside the IF-statement and moving out of it fixed the issue.
Your answer