Unityであっさりとフェードインができた

こんにちは。ヤマヤタケシです。

相変わらずUnityをいじっています。 ゲームの演出でよくある、真っ白からのフェードインとか真っ黒へのフェードアウトとか、簡単そうに思えて意外に手間取ることが多かったのです。 しかし、さっすがUnity! あっさりとできてしまいました。

できたと言っても、unity fadein でググってできてきたのをベースに俺流でアレンジしただけですけどね。 こことか。

とにかく、白いテクスチャを作るのがこのコードだけでできちゃうのがスゴイ。

texture = new Texture2D( 1, 1, TextureFormat.ARGB32, false );
    texture.SetPixel(0,0, Color.white );
    texture.Apply();

スゴイや・・・。 N88日本語Basic時代に戻った気分です。 あの時は簡単に点がうてて、線が引けました。 そんな時代が長らく失われていたのです。

フェードのコアである、テクスチャの描画もこれだけ・・・

function OnGUI()
{
    GUI.color = now;
    GUI.DrawTexture( Rect( 0, 0, Screen.width, Screen.height ), texture );
}

たまにはプログラムを書けるアピールのために、フェードインアウトのソースを載っけます。 残りの部分の方が多いですけど、色を時間で補間しているだけです。

#pragma strict
//
//
// フェードイン、フェードアウト
//
//
private var texture : Texture2D;
private var sequence : String = null;
private var from : Color;
private var to : Color;
private var now : Color; 
private var time : float ;

function Awake()
{
    texture = new Texture2D( 1, 1, TextureFormat.ARGB32, false );
    texture.SetPixel(0,0, Color.white );
    texture.Apply();
}

function Start () {
}

function Update () {
    if( Input.GetButtonDown( "Fire1" )  ){
    FadeIn( 1, Color.white );
    }
    if( Input.GetButtonDown( "Fire2" )  ){
    FadeOut( 1, Color.white );
    }
}


function OnGUI()
{
    if( now.a != 0 ){
    GUI.color = now;
    GUI.DrawTexture( Rect( 0, 0, Screen.width, Screen.height ), texture );
    }
}

function StartSequence( function_name : String )
{
    if( sequence ){
    StopCoroutine( sequence );
    sequence = null;
    }
    sequence = function_name;
    StartCoroutine( sequence );
}


function FadeUpdate()
{
    var now_time : float = 0;
    while( 0 < time && now_time < time ){ 
    now_time += Time.deltaTime;
    now = Color.Lerp( from, to, now_time / time );
    yield;
    }
    now = to;
}

function FadeIn( t_time : float, t_color : Color )
{
    to = from = t_color;
    to.a = 0;
    time = t_time;
    StartSequence( "FadeUpdate" );
}


function FadeOut( t_time : float , t_color : Color )
{
    to = from = t_color;
    from.a = 0;
    time = t_time;
    StartSequence( "FadeUpdate" );
}

そんじゃまた。

軽い気持ちで有名になりたいのでクリックをお願いします!

追記!
あらためてコピペしてビルドしました。動作したけどなぁ・・・。
右クリックと左クリックでフェードイン、フェードアウトです。

Unityであっさりとフェードインができた” への7件のコメント

  1. うーん、今一度、コピペしてみましたが、動きました。私はFirefoxを使っています。
    “<"を;にすれば動作すると思いますが、なぜ"<"になったのか・・・。

  2. now = Color.Lerp( from, to, now_time / time ) “<"
    yield;
    ??
    まだエラーになっています。 -.-

コメントを残す