おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

Unity - シーン切り替えの時にオブジェクトを破棄させない

f:id:xev:20150124023327p:plain

シーン切り替えにフェードイン/アウト

シーンを切り替える際に、
フェードイン/アウトの効果をつけようと思いました。

SceneA -> fadeOut -> (Load SceneB) -> fadeIn

SceneAから暗転、暗転しきった段階で、
次のシーンを読み込んでおいて、暗転から復帰。
だいたいこんな流れのつもりで。

ところが。。。

フェードインしない

じゃあ、やってみようと思ったところ、
Aから暗転するが、Bを読み込んだ時点で、
Bがいきなり表示されます。

情緒も何も無いったりゃありゃしない。
o(`ω´*)oプンスコ

シーンのロード時にオブジェクトは破棄される

なぜフェードインしないかっていうと、
わたしが実装したフェードイン/アウトには、
板ポリを作ってカメラに写して、α値を返ることで実装していたので、
次のシーンを読み込んだ時点で、フェード用のオブジェクトが破棄されていたんですね。

シーンがロードされようがオブジェクトを消さない方法

さすが、Unity。 ちゃんと対応策が用意されています。

ズバッと
DontDestroyOnLoad

を使いました。

消したくないオブジェクトを引数に指定するか、
わたしの場合は、フェード用のインスタンスの初期化メソッド中に、

DontDestroyOnLoad(this)

を仕込んでおきました。

これで、別シーンがロードされても、 オブジェクトは消えず、フェードインまでやってくれるようになりましたよ。

まぁ、それだと、ずっと残っちゃうので、フェードインして役割を終えたオブジェクトは、

Destroy(this)

して自爆します。

参考: http://qiita.com/srtkmsw/items/bf6a33d6bb2987c74936