Matineeを使ったフェードイン・アウト

 このブログはもんしょの巣穴 Unreal Engine 4 出張所になりました。

いや、まあ、それは半分嘘ですが、半分はほんとです。たぶん、UE4の話題はここでやります。

画像貼るとかはこっちの方が楽かな、と。

動画でやる方法もありそうですが、喋りの下手な人間は文章でやった方がいいはず。

ってなわけで、今回は第1回ですが、Matineeを使ってフェードイン・アウトをやってみようと思います。

ゲームを開始したら黒画面からフェードインして、テーブル上の置物に近づいたらフェードアウトするだけです。

まずはブランクプロジェクトを作成します。名前はFadeProjectとでもしておきましょう。

ue001.png

 作成するとテーブルと椅子、置物のレベルが出てくるはずです。

次にフェードイン・アウトのMatineeを作成します。

MatineeはツールバーのMatineeボタンを押して、Add Matineeを選択します。

 ue002.png 

Matinee編集画面が開いたらDirector Groupを作成します。All、Camerasなどのボタンがある辺りで右クリックしてコンテキストメニューから選択しましょう。

ue003.png 

次にDir Groupと書かれているあたりで右クリック。Add New Fade Trackを選択してフェード用のトラックを作成します。

 ue004.png 

キーを打つ際にはメニューのAdd Keyボタンを使います。クリーム色?の縦バーが現在のフレームで、ここにキーが打たれます。

キーは右クリックのコンテキストメニューで時間と数値を数値指定で変更できます。

フェードイン用のMatineeは0秒、0.5秒、1.5秒にキーを打ち、それぞれの値を1, 1, 0にします。

フェードアウト用のMatineeは0秒、1秒のキーを打ち、数値は0, 1とします。

フェードトラックでは1がフェードアウト状態、0がフェードイン(つまりゲーム画面が見えている)状態となります。

Matineeを作成するとScene OutlinerにMatineeActorというアクターが作られますが、わかりやすい名前にしておく方がよいでしょう。

私はFadeIn、FadeOutと名前を付けました。

ではまずゲーム開始時にフェードインから始まるようにしてみましょう。

ツールバーのBlueprints→Open Level Blueprintを選択し、このレベルのBlueprintを表示します。

ue005.png 

Event Begin Playを配置し、レベル開始時のイベント処理を作成します。

Scene OutlinerでFadeInを選択した状態で右クリック、検索を利用してFadeInアクターのPlay命令を探します。

図のようにつなげたらゲームをプレイしてみましょう。フェードインで開始するはずです。

ue006.png 

フェードアウトはゲーム開始後、カメラを移動させてテーブル上の置物に近づいたところで発行するようにします。

ツールバーのBlueprints→New Class Blueprintで新しいBPを作成します。

Parent ClassはActorを選択、名前はHitBoxBPとします。

HitBoxBPのComponentはBoxのみにします。Add ComponentでBoxを選択。

デフォルト値はそのままでOKですので、Graphの作成を行っていきます。

まず、My BlueprintタブでEvent Dispatcherを一つ作成します。名前はOnFadeOutとでもしておきましょう。

My BlueprintタブのBoxを右クリックし、Add Event→Add OnComponentBeginOverlapを選択、このイベントからCall OnFadeOutを発行します。

最終的には下図のようなBPになります。

ue007.png

このBPはレベル中に配置することができます。適当な大きさにしてテーブルの上に配置します。

配置が完了したら再びレベルのBPを編集します。

配置したHitBoxBPを選択した状態でBPのGraph内を右クリック、HitBoxBPのOnFadeOutイベントを検索して配置します。

次にScene OutlinerでFadeOutを選択し、BP編集で右クリック、FadeOutのPlay関数を検索してこれを先のイベントに接続します。

以下の図のように接続ができたら完了です。

ue008.png 

早速プレイしてみましょう。

ゲーム開始時はフェードインから始まり、カメラを移動してテーブル上部の配置ボックス(ゲーム画面上では見えませんが)に接触するとフェードアウトします。

ただ、この状態ではフェードアウト開始から5秒後にはフェードアウト状態が解除されてしまいます。

この理由はMatineeが終了してフェードトラックが無効化してしまうからです。

まあ、フェードアウトするということはその後に場面転換や別のレベルのロードなどを行うことになるはずなので、適当なところでフェードアウトのMatineeを一時停止、場面転換とかを行って再びフェードインさせればいいかな、と。

しかしながら、この方法はそんなに一般的ではないかもしれません。

カットシーンは基本的にMatineeで使うため、カットシーンで利用するならいいのかもしれませんが、ゲーム中の汎用的な扱いにはHUDを利用した方がいいかな、と。

他にももうちょっとマシなやり方があるのかもしれませんが、自分が見つけた、コードを書かずに処理できる方法としてはこれが一番手っ取り早いような気がしますね。