PaperSloth’s diary

Unity(C#)、UE4(Blueprint/C++)についての記事を書いたり日常のことをつぶやきます。

UE4 ゲーム内で動画を再生する方法

目次

・動画再生可能なフォーマット
・動画再生を行うには
・まとめ

環境

・Unreal Engine4.17.2
・Windows10

Mac, Linux, iOS, Android等の確認は行っていません。

動画再生可能なフォーマット

Platformごとに使用可能なフォーマットは公式ドキュメントに記載があります。
Unreal Engine | メディア フレームワークの技術リファレンス

サポート対象のファイル、URL、キャプチャ デバイスより2017/10/30段階での対応画像も貼っておきます。
f:id:PaperSloth:20171030234044j:plain

Windowsで.aviと.mp4が対応されていることが確認できました。
今回はこの2つの動画フォーマットについて書きます。
他のフォーマットでもプラットフォームで対応されているものであれば、再生可能だと思います。

動画再生を行うには

Windowsで再生するためには
 Windowsで再生をするためには下記プラグインを有効にする必要があります。
 基本的には有効になっているかと思いますが、パッケージ容量削減のために無効にしている場合は注意が必要です。
 f:id:PaperSloth:20171030235522p:plain
WMFとはWindows Media Foundationの略称です。
Microsoft Media Foundation (Windows)

調べてみると難しそうな用語が並んでいますが、ざっくりいってしまうと
「マルチメディアを扱うためのMicrosoftAPI群」です。


②動画をインポートする
先ず、動画の保存先には注意が必要です。

Content/Movies以下に動画ファイルを保存する必要があります。

続いて.aviと.mp4で違いがあります。

先ずはaviについて。
こちらは凛さんがブログにまとめてくださっています。
UE4 UMGでムービー(動画)を再生する 凛(kagring)のUE4とUnityとQt勉強中ブログ

直接Media Playerが生成されれば、そこからMedia Textureを生成してマテリアルに適用する等で直ぐに再生が可能ですね。


続いてmp4の場合について。
mp4をインポートしてみると下図のようにFile Media Sourceが生成されると思います。
f:id:PaperSloth:20171031001221p:plain


Windowsで再生するために設定を変更する
先程インポートして生成されたFile Media Playerの
Windowsの欄をWMFに変更します。
この際に①で挙げたプラグインのWMF Media Playerが無効だと選択できません。
f:id:PaperSloth:20171031001835p:plain


④Media Playerを作成する
MediaからMedia Playerを作成します。
f:id:PaperSloth:20171031002505p:plain

すると下記のWindowが表示されます。
今回は動画ですので、下のVideoにチェックを入れましょう。
f:id:PaperSloth:20171031003232p:plain

作成すると下記のように
Media PlayerとMedia Textureが作成されます。
f:id:PaperSloth:20171031003429p:plain


Media Playerを開いてみると下図のようなUIが表示されると思います。
そこで、Playを押下して動画が正しく再生されることを確認しておきましょう。
今回はテスト用にContentExampleのMediaExampleを使用してみました。
f:id:PaperSloth:20171031002800p:plain


⑤再生する
再生するためにはマテリアルを作成する必要があります。
今回はStaticMeshに貼り付けてみました。
UIで表示したい場合は先程の凛さんのブログが参考になります。
基本的にはマテリアルがSurfaceかUserInterfaceかくらいの違いしかありません。
f:id:PaperSloth:20171031004537p:plain


f:id:PaperSloth:20171031004621p:plain


このマテリアルをStaticMeshに貼り付けただけでは再生されません。
Media Playerの設定を確認してましょう。
確認すべき箇所はDetailsのPlaybackの項目です。
f:id:PaperSloth:20171031004904p:plain

- Play on Open
Open Source等のノードが呼び出された際に自動で再生するか
- Shuffle
Play Listを設定した場合にシャッフル再生を行うか(動作未確認)
- Loop
動画再生終了時にループ再生を行うか


今回はPlay on Openだけチェックが入っていることを確認しましょう。


最後に再生したいタイミングで(今回はレベル開始時)Open Sourceを呼び出します。
Media Playerの変数を作成して、そこに再生したいMedia Sourceを登録するだけです。
f:id:PaperSloth:20171031011434p:plain

もしも、Play on Openにチェックを入れていない場合は下記のようにPlayノードを呼び出します。
f:id:PaperSloth:20171031005511p:plain


しかし、これでは動作しないことがあります。
その場合はDelayを入れるか別のタイミングでPlayを呼び出してみましょう。

f:id:PaperSloth:20171031005639p:plain


Planeに貼り付けてみるとこんな感じになりました!
f:id:PaperSloth:20171031010048p:plain

まとめ

説明が長いせいで複雑な印象を与えてしまったかもしれません。
簡単におさらいします。
①動画インポート
 File Media Sourceの設定を変更
②Media Player作成(同時にMedia Textureも作成される)
③Media Textureを使用したMaterial作成
 UIの場合はUserInterfaceに変更しておく
④MediaPlayerの変数を作成
⑤OpenSource, Playノードを呼び出す
Media Playerで再生しようとした時にエラーが出た場合は動画の保存場所を疑ってみましょう。
Content/Movies以下に保存する必要があります。


・使用例
VRと組み合わせることで映画館が作れそうですね。
インゲームではPVを流したり、チュートリアルの説明に活かせそうです。


・プラットフォーム対応について
今回は説明が長いため、省略しましたがプラットフォームごとに別の解像度、別のフォーマット、別の動画を再生したい場合
Media/Platform Media Sourceを使用しましょう。
すると、プラットフォームごとのFile Media Sourceの設定が可能になります。