FadeInOut

From Unify Community Wiki
(Difference between revisions)
Jump to: navigation, search
(Source (CameraFade.cs))
(Removing all content from page)
Line 1: Line 1:
[[Category: JavaScript]][[Category: Boo]][[Category: Scripts]][[Category: Camera Controls]]
 
  
== JavaScript ==
 
 
=== Introduction ===
 
 
Author: [[User:PsychicParrot|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: [[User:Adrian|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: [[User:ratmat2000|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>
 
 
 
The following bugs have been identified in the code segment above
 
 
LINE 133: FadeInOut should read CameraFade
 
 
LINE 136: Replace FadeInOut occurances with CameraFade
 
 
Also when I was trying to use it, if I didn't FadeIn on start the value for currentAlpha would end up NaN.  I had to do some rearranging, but when I was done there were conditions that would cause currentAlpha to equal the targetAlpha when I issued a FadeIn command.  I corrected this by placing the following code in the FadeIn method and an equivalent one in the FadeOut.
 
 
 
<javascript>
 
    //Check to see if currentAlpha is set to 1.  It will need to be 1 to fade properly
 
    if (currentAlpha != 1){
 
          currentAlpha = 1;
 
        }
 
</javascript>
 
 
I would replace this code with mine, but I've already changed my so much I am hesitant to do so, I'll leave that exercise to someone else.
 

Revision as of 18:32, 19 October 2009

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox