FadeInOut
Contents |
JavaScript
Introduction
Author: PsychicParrot
Little script to fade an image (stretched to fit the screen, so use a 1x1 black pixel for a simple black fade in/out).
Simply apply it to your camera (or an empty GameObject), set the texture to use, set the fadeSpeed and call fadeIn() or fadeOut()
Easiest way is probably to apply this script to your main camera in the scene, then wherever you want to fade use something like:
Camera.main.SendMessage("fadeOut");
or
Camera.main.SendMessage("fadeIn");
Enjoy!
Source (FadeInOut.js)
<javascript>
// FadeInOut // //-------------------------------------------------------------------- // Public parameters //--------------------------------------------------------------------
public var fadeOutTexture : Texture2D; public var fadeSpeed = 0.3;
var drawDepth = -1000;
//-------------------------------------------------------------------- // Private variables //--------------------------------------------------------------------
private var alpha = 1.0;
private var fadeDir = -1;
//-------------------------------------------------------------------- // Runtime functions //--------------------------------------------------------------------
//--------------------------------------------------------------------
function OnGUI(){
alpha += fadeDir * fadeSpeed * Time.deltaTime; alpha = Mathf.Clamp01(alpha);
GUI.color.a = alpha;
GUI.depth = drawDepth;
GUI.DrawTexture(Rect(0, 0, Screen.width, Screen.height), fadeOutTexture); }
//--------------------------------------------------------------------
function fadeIn(){ fadeDir = -1; }
//--------------------------------------------------------------------
function fadeOut(){ fadeDir = 1; }
function Start(){ alpha=1; fadeIn(); } </javascript>
Boo
Introduction
Author: Adrian
Extended version written in Boo (put it into "Standard Assets/Scripts" to use it from within JavaScript files).
Main change is that rather than defining a fade speed you can set the duration of the fade in seconds.
Also provides methods to set the fade duration when the method is called and static methods to call the fade script on the main camera (by calling CameraFade.FadeInMain()).
Source (CameraFade.boo)
<boo>import UnityEngine
class CameraFade (MonoBehaviour):
# ---------------------------------------- # # PUBLIC FIELDS
# Alpha start value public startAlpha as single = 1
# Texture used for fading public fadeTexture as Texture2D
# Default time a fade takes in seconds public fadeDuration as single = 2
# Depth of the gui element public guiDepth as int = -1
# Fade into scene at start public fadeIntoScene as bool = true
# ---------------------------------------- # # PRIVATE FIELDS
# Current alpha of the texture currentAlpha as single = 1
# Current duration of the fade currentDuration as single
# Direction of the fade fadeDirection as int = -1
# Fade alpha to targetAlpha as single = 0
# Alpha difference alphaDifference as single = 0
# Style for background tiling private backgroundStyle as GUIStyle = GUIStyle() private dummyTex as Texture2D
# ---------------------------------------- # # START FADE METHODS
def FadeIn(duration as single, to as single): # Set fade duration currentDuration = duration # Set target alpha targetAlpha = to # Difference alphaDifference = Mathf.Clamp01(currentAlpha - targetAlpha) # Set direction to Fade in fadeDirection = -1
def FadeIn(): FadeIn(fadeDuration, 0)
def FadeIn(duration as single): FadeIn(duration, 0)
def FadeOut(duration as single, to as single): # Set fade duration currentDuration = duration # Set target alpha targetAlpha = to # Difference alphaDifference = Mathf.Clamp01(targetAlpha - currentAlpha) # Set direction to fade out fadeDirection = 1
def FadeOut(): FadeOut(fadeDuration, 1)
def FadeOut(duration as single): FadeOut(duration, 1)
# ---------------------------------------- # # STATIC FADING FOR MAIN CAMERA
static def FadeInMain(duration as single, to as single): GetInstance().FadeIn(duration, to)
static def FadeInMain(): GetInstance().FadeIn()
static def FadeInMain(duration as single): GetInstance().FadeIn(duration)
static def FadeOutMain(duration as single, to as single): GetInstance().FadeOut(duration, to)
static def FadeOutMain(): GetInstance().FadeOut()
static def FadeOutMain(duration as single): GetInstance().FadeOut(duration)
# Get script fom Camera static def GetInstance() as CameraFade: # Get Script fader as CameraFade = Camera.main.GetComponent(CameraFade) # Check if script exists if (fader == null): raise System.Exception("No CameraFade attached to the main camera.") return fader
# ---------------------------------------- # # SCENE FADEIN
def Start(): dummyTex = Texture2D(1,1) dummyTex.SetPixel(0,0,Color.clear) backgroundStyle.normal.background = fadeTexture currentAlpha = startAlpha if fadeIntoScene: FadeIn()
# ---------------------------------------- # # FADING METHOD
def OnGUI():
# Fade alpha if active if ((fadeDirection == -1 and currentAlpha > targetAlpha) or (fadeDirection == 1 and currentAlpha < targetAlpha)): # Advance fade by fraction of full fade time currentAlpha += (fadeDirection * alphaDifference) * (Time.deltaTime / currentDuration) # Clamp to 0-1 currentAlpha = Mathf.Clamp01(currentAlpha)
# Draw only if not transculent if (currentAlpha > 0): # Draw texture at depth GUI.color.a = currentAlpha; GUI.depth = guiDepth; GUI.Label(Rect(-10, -10, Screen.width + 10, Screen.height + 10), dummyTex, backgroundStyle) </boo>
C#
Introduction
Author: ratmat2000
Extended version written in C# (put it into "Standard Assets/Scripts" to use it from within JavaScript files).
This version is identical to the Boo version but written in C#.
Source (CameraFade.cs)
<javascript> using UnityEngine;
public class CameraFade : MonoBehaviour {
// ---------------------------------------- // PUBLIC FIELDS // ----------------------------------------
// Alpha start value public float startAlpha = 1; // Texture used for fading public Texture2D fadeTexture; // Default time a fade takes in seconds public float fadeDuration = 2; // Depth of the gui element public int guiDepth = -1000; // Fade into scene at start public bool fadeIntoScene = true; // ---------------------------------------- // PRIVATE FIELDS // ---------------------------------------- // Current alpha of the texture private float currentAlpha = 1; // Current duration of the fade private float currentDuration; // Direction of the fade private int fadeDirection = -1; // Fade alpha to private float targetAlpha = 0; // Alpha difference private float alphaDifference = 0; // Style for background tiling private GUIStyle backgroundStyle = new GUIStyle(); private Texture2D dummyTex; // Color object for alpha setting Color alphaColor = new Color(); // ---------------------------------------- // FADE METHODS // ---------------------------------------- public void FadeIn(float duration, float to) { // Set fade duration currentDuration = duration; // Set target alpha targetAlpha = to; // Difference alphaDifference = Mathf.Clamp01(currentAlpha - targetAlpha); // Set direction to Fade in fadeDirection = -1; } public void FadeIn() { FadeIn(fadeDuration, 0); } public void FadeIn(float duration) { FadeIn(duration, 0); } public void FadeOut(float duration, float to) { // Set fade duration currentDuration = duration; // Set target alpha targetAlpha = to; // Difference alphaDifference = Mathf.Clamp01(targetAlpha - currentAlpha); // Set direction to fade out fadeDirection = 1; } public void FadeOut() { FadeOut(fadeDuration, 1); } public void FadeOut(float duration) { FadeOut(duration, 1); } // ---------------------------------------- // STATIC FADING FOR MAIN CAMERA // ---------------------------------------- public static void FadeInMain(float duration, float to) { GetInstance().FadeIn(duration, to); } public static void FadeInMain() { GetInstance().FadeIn(); } public static void FadeInMain(float duration) { GetInstance().FadeIn(duration); } public static void FadeOutMain(float duration, float to) { GetInstance().FadeOut(duration, to); } public static void FadeOutMain() { GetInstance().FadeOut(); } public static void FadeOutMain(float duration) { GetInstance().FadeOut(duration); } // Get script fom Camera public static FadeInOut GetInstance() { // Get Script FadeInOut fader = (FadeInOut)Camera.main.GetComponent("FadeInOut"); // Check if script exists if (fader == null) { Debug.LogError("No FadeInOut attached to the main camera."); } return fader;
}
// ---------------------------------------- // SCENE FADEIN // ---------------------------------------- public void Start() { Debug.Log("Starting FadeInOut"); dummyTex = new Texture2D(1,1); dummyTex.SetPixel(0,0,Color.clear); backgroundStyle.normal.background = fadeTexture; currentAlpha = startAlpha; if (fadeIntoScene) { FadeIn(); } } // ---------------------------------------- // FADING METHOD // ---------------------------------------- public void OnGUI() { // Fade alpha if active if ((fadeDirection == -1 && currentAlpha > targetAlpha) || (fadeDirection == 1 && currentAlpha < targetAlpha)) { // Advance fade by fraction of full fade time currentAlpha += (fadeDirection * alphaDifference) * (Time.deltaTime / currentDuration); // Clamp to 0-1 currentAlpha = Mathf.Clamp01(currentAlpha); } // Draw only if not transculent if (currentAlpha > 0) { // Draw texture at depth alphaColor.a = currentAlpha; GUI.color = alphaColor; GUI.depth = guiDepth; GUI.Label(new Rect(-10, -10, Screen.width + 10, Screen.height + 10), dummyTex, backgroundStyle); } }
} </javascript>