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.clear, color, currentTime / time);
break;
case FadeStatus.FADEOUT :
currentColor = Color.Lerp (color, Color.clear, currentTime / (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 (0, 0, Screen.width, Screen.height), Texture2D.whiteTexture);
GUI.color = gColor;
}
public void Init ()
{
currentTime = 0;
currentColor = Color.clear;
fadeStatus = FadeStatus.FADEIN;
}
}
'Game > Unity' 카테고리의 다른 글
Unity에서 화면 외의 위치를 검색하는 방법 (0) | 2015.09.09 |
---|---|
[unity3d] swipe (0) | 2015.03.27 |
[Unity] 유니티 프로그래머가 알아야 할 최적화 코드작성법 (1) | 2015.03.20 |
Unity 5.0에서의 새로운 AssetBundle (0) | 2015.03.20 |
[unity3d]안드로이드에서 암호화 팁 - PlayerPref 암호화 (0) | 2015.03.18 |