본문 바로가기

Game/Unity

[unity3d] fadein, fadeout

using UnityEngine;
using System.Collections;

public enum FadeStatus
{
    FADEIN,
    FADE,
    FADEOUT,
    FADEOVER
}

public class FadeInOutComponent : MonoBehaviour
{
    // delegate
    public delegate void FinishDelegate ();
    private FinishDelegate fadeIn;
    private FinishDelegate fade;
    private FinishDelegate fadeOut;

    public FinishDelegate FadeIn
    {
        set {
            fadeIn = value;
        }
    }

    public FinishDelegate Fade
    {
        set {
            fade = value;
        }
    }

    public FinishDelegate FadeOut
    {
        set {
            fadeOut = value;
        }
    }

    // component
    public Color color = Color.black;
    private Color currentColor;
    // variable
    public float time = 0.4f;
    private float currentTime;
    private FadeStatus fadeStatus;

    void Start ()
    {
        currentTime = time;
        currentColor = Color.clear;
        fadeStatus = FadeStatus.FADEOVER;
    }

    void Update ()
    {
        if (fadeStatus == FadeStatus.FADEOVER) {
            return;
        }

        currentTime += Time.deltaTime;

        switch (fadeStatus) {
        case FadeStatus.FADEIN :
            currentColor = Color.Lerp (Color.clearcolorcurrentTime / time);
            break;
        case FadeStatus.FADEOUT :
            currentColor = Color.Lerp (colorColor.clearcurrentTime / (time));
            break;
        }

        if (currentTime >= time) {
            currentTime = 0;
            switch (fadeStatus) {
            case FadeStatus.FADEIN :
                fadeStatus = FadeStatus.FADE;

                if (fadeIn != null) {
                    fadeIn ();
                }
                break;
            case FadeStatus.FADE :
                fadeStatus = FadeStatus.FADEOUT;

                if (fade != null) {
                    fade ();
                }
                break;
            case FadeStatus.FADEOUT :
                fadeStatus = FadeStatus.FADEOVER;

                if (fadeOut != null) {
                    fadeOut ();
                }
                break;
            default :
                return;
            }
        }
    }

    void OnGUI ()
    {
        var gColor = GUI.color;
        GUI.color = currentColor;
        GUI.DrawTexture (new Rect (00Screen.widthScreen.height), Texture2D.whiteTexture);
        GUI.color = gColor;
    }

    public void Init ()
    {
        currentTime = 0;
        currentColor = Color.clear;
        fadeStatus = FadeStatus.FADEIN;
    }
}