シヴァのブログ

UnityやUE4や趣味とかいろいろ...

開発メモ 「暗転処理(フェードイン,フェードアウト),メッセージング(SendMessage)」

シーンを切り替える際に、

不自然さをなくしたりするのに覚えておきたい暗転処理。

なんとかできたので、メモ。ついでに、SendMessageも。

(FadeInOut.js)

***************************************************************************

#pragma strict
// FadeInOut

public var fadeOutTexture : Texture2D;
public var fadeSpeed = 0.3;
 
var drawDepth = -1000;
private var alpha = 1.0;
private var fadeDir = -1;

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();
}

***************************************************************************

あとは、

これをフェードインしたいシーンのMainCameraに

D&D(ドラッグアンドドロップ)する。

 

フェードアウトは、

フェードアウトしたいところに、

「SendMessage」を用いて、機能させる。

 

例えば、

ゲームオーバーになる際に使用するなら、以下のようにする。

 

***************************************************************************

function Die(){
    gameObject.SendMessage("fadeOut");
    yield WaitForSeconds(3.0);
    Application.LoadLevel("GameOver");
}

***************************************************************************

 

簡単に説明すると、

gameObject.SendMessage("fadeOut");は、

FadeInOut.jsの行内にある、

 

function fadeOut(){
    fadeDir = 1;   
}

 

を利用している。

難しく説明すると、

連携相手のコンポーネントを特定せずに、関数を呼び出している。

んで、

これを”メッセージング”っていう...らしい。

 

うん。

そんなこんなで終わり。