====== 061 フェードイン・アウトを実装する ======
===== 概要 =====
コルーチンを使って、画面のフェードイン/フェードアウトを実現します。
フェード後に関数を呼び出せます。
==== ソースコード ====
using UnityEngine;
using System.Collections;
using System;
//
// Faderクラス
//
// 任意のGameObjectに割り当てて使用します。
//
//
public class Fader : Singleton
{
public enum FADE_TYPE
{
FADE_IN = 0,
FADE_OUT = 1,
FADE_OUTIN = 2,
};
private Texture2D fadeTexture = null;
private float fadeAlpha = 0;
protected override void Initialize()
{
// 黒テクスチャの作成。
this.fadeTexture = new Texture2D( 1, 1 );
this.fadeTexture.SetPixel( 0, 0, Color.black );
this.fadeTexture.Apply();
}
public void OnGUI()
{
//透明度を更新して黒テクスチャを描画
if( Event.current.type == EventType.Repaint )
{
GUI.color = new Color( 0, 0, 0, this.fadeAlpha );
GUI.DrawTexture( new Rect( 0, 0, Screen.width, Screen.height ), this.fadeTexture );
}
}
// フェード開始
// _type フェードの種類
// _interval フェードにかける時間
// _interval _onActionフェード完了後に呼ぶ関数
public void StartFade( FADE_TYPE _type, float _interval, Action _onAction )
{
this.gameObject.SetActive( true );
switch( _type )
{
case FADE_TYPE.FADE_OUT:
StartCoroutine( FadeOut( _interval, _onAction ) );
break;
case FADE_TYPE.FADE_IN:
StartCoroutine( FadeIn( _interval, _onAction ) );
break;
case FADE_TYPE.FADE_OUTIN:
StartCoroutine( FadeOutIn( _interval, _onAction ) );
break;
};
}
private IEnumerator Fade( FADE_TYPE _type, float interval )
{
float time = 0;
float min = ( _type == FADE_TYPE.FADE_OUT) ? 0.0f : 1.0f;
float max = ( _type == FADE_TYPE.FADE_OUT) ? 1.0f : 0.0f;
while( time <= interval )
{
this.fadeAlpha = Mathf.Lerp( min, max, time / interval );
time += Time.deltaTime;
yield return 0;
}
}
private IEnumerator FadeOut( float interval, Action _onAction )
{
yield return StartCoroutine( Fade( FADE_TYPE.FADE_OUT, interval ) );
_onAction();
this.gameObject.SetActive( false );
}
private IEnumerator FadeIn( float interval, Action _onAction )
{
yield return StartCoroutine( Fade( FADE_TYPE.FADE_IN, interval ) );
_onAction();
this.gameObject.SetActive( false );
}
private IEnumerator FadeOutIn( float interval, Action _onAction )
{
yield return StartCoroutine( Fade( FADE_TYPE.FADE_OUT, interval ) );
_onAction();
yield return StartCoroutine( Fade( FADE_TYPE.FADE_IN, interval ) );
this.gameObject.SetActive( false );
}
}
==== 使い方 ====
Fader.Instance.StartFade( Fader.FADE_TYPE.FADE_OUTIN, 0.4f, () =>
{
Application.LoadLevel( "title" );
});