Unityで動画を再生する

ゲームのイベントをクリアすると途中でムービーが流れる事はよくありますね、今回はそういったムービーをUnityで再生する事が出来るようにします。

WindowsのUnityに動画をインポートするにはAppleのQuickTimeがパソコンにインストールされている必要があります。

インストールされていない方はインストールするようにしてください。

ただしWindows版のQuickTimeはサポートが終了しているようです。

ブラウザを介した動画の再生に利用する点では脆弱性が発生するようなので気を付けてください。

今回の場合Unityにインポートする際にQuickTimeを使用しているだけで再生とは関係ないんでしょうか?

とりあえず動画をUnityに取り込んだ後QuickTimeをアンインストールしてもUnity内で再生出来たのでやはり取り込み時にだけ使っているようです。

再生出来る動画のファイル形式等詳しい事は

Unity-マニュアル:ムービーテクスチャ

を参照してください。

スポンサーリンク

動画ファイルをUnityにインポートする

まずは動画ファイルをUnityにインポートします。

環境によってはQuickTimeで再生出来るファイル形式でもインポートに失敗します。

わたくしの場合MP4が取りこめたのでMP4にしてUnityに取り込みました。

ProjectsタブのAssetsエリアで右クリック→Import NewAssetsを選択し動画ファイルを選びます。

動画ファイルをインポート

↑のように動画の中にオーディオクリップがある形のファイルになります。

動画のQualityを1にする

それぞれの動画のクオリティを1にしてクオリティを上げておきます。

動画を再生させる

動画を貼り付ける場所を3D Objectで作成したPlaneとUIのRawImageに貼り付ける2つの方法で動画を再生してみます。

3D ObjectのPlaneで再生

ヒエラルキーに右クリック→3D Object→Planeを選択しカメラに映るように回転させます。

Planeをカメラから見えるように回転

PlaneにMovieTestというスクリプトを作り取りつけます。

再生する動画はMovieTextureとして扱います。

Unity5.3.4f1だと動画のImportSettingsに再生のオプションが表示されないのでスクリプトで設定しています・・・(^_^;)

再生する動画をインスペクタで設定出来るようにしSキーで再生とポーズ、Qキーで停止を行います。

またNキーを押した時に次の動画に切り替えています。

今回はPlaneなのでMeshRendererのMaterialのMainTextureにMovieTextureを設定しています。

MovieTextureはTextureと同じ扱いが出来るので、スクリプトで設定せず、AssetsエリアにMaterialを作成しAlbedoにインポートした動画を設定し、

そのマテリアルをMeshRendererのMaterialsに設定し使用する事が出来ます。

Planeのインスペクタで設定をし動画を再生してみましょう。

Planeのインスペクタで動画を設定

↑のようにMovieTestでModeをPlaneにし、Moviesに動画を2本ドラッグ&ドロップします。

それでは実行してみましょう。

Planeに動画を貼り付け

↑のように最初の動画がSキーで再生されもう一度Sキーを押すと停止しています。

Nキーを押すと別の動画に切り替わりSキーを押して再生されています。

UIのRawImageで動画を再生

次はUIのRawImageで動画を再生してみましょう。

使用するスクリプトは同じなのでModeをRawImageに変更します。

次はヒエラルキーで右クリック→UI→RawImageを選択します。

RawImageで動画を再生する設定

MoveTestスクリプトを取りつけ↑のようにインスペクタの設定をします。

同じようにUnityを実行し確認してみてください。

実行結果はほぼ同じなのでサンプル動画は載せません。

動画の音声を再生する

実はここまでで動画の再生は出来ましたが音声が再生されていませんでした。

音声はAudioSourceコンポーネントを取りつけ、動画をインポートした時に一緒に付いてきた音声ファイルをAudioClipに設定する必要があるようです。

RawImageにAudioSourceコンポーネントを取りつけそこに音声ファイルをドラッグ&ドロップしてください。

またMovieTestスクリプトを修正します。

インスペクタで音声ファイルを設定出来るようにし、動画の再生と合わせて音声も再生したり止めたりしています。

audioSource.Pause()

という記述がありますが、動画がPauseされるといっしょに音声が止まってるようなのであえて記述しなくていいのかも?

そればかりじゃなくAudio SourceコンポーネントのPitchを遅くすると動画も遅くなります。

動画に内包される形で音声ファイルがあるのでこういう風になるんでしょうか?

動画の音声ファイルをドラッグ&ドロップ

↑のようにMovieTestスクリプトのインスペクタに動画の音声ファイルをドラッグ&ドロップします。

動画の再生と合わせて音声が鳴ると思います。

音声をどこで手に入れたものかちょっと忘れたので音声付動画は載せるのは控えます・・・・(^_^;)

終わりに

今回の動画の再生はスタンドアロン形式の動画の再生に関してのもので、スマフォで動画を再生する場合は特殊フォルダStreamingAssetsに動画を置いてそれを利用しなければいけないようです。

またAndroid形式はMovieTexture形式自体がサポートされていないようです。

詳しくは

Unity-マニュアル:ムービーテクスチャ

に載っています。

スマフォ持ってないから確認出来ません・・・ごめんなさい(-_-)

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます