開発メモ 「暗転処理(フェードイン,フェードアウト),メッセージング(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;
}
を利用している。
難しく説明すると、
連携相手のコンポーネントを特定せずに、関数を呼び出している。
んで、
これを”メッセージング”っていう...らしい。
うん。
そんなこんなで終わり。