UnityでMovieTextureを使って動画を再生する

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

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

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

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

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

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

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

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

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

を参照してください。

Unity5.6以降のバージョンの方はVideo Playerを使った方がいいかもしれません。

Unity5.6以降で導入されたVideoPlayerを使って動画を再生・停止させてみます。

MovieTextureより使いやすいかも!?

スポンサーリンク

動画ファイルを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-マニュアル:ムービーテクスチャ

に載っています。

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

スポンサーリンク

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

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

コメント

  1. ひこーかい より:

    ありがとうございます。
    お陰で解決できました!

  2. ひこーかい より:

    Planeを画面サイズに合わせたいんですが、何かいい方法は無いでしょうか?

    • 動画を単純に画面サイズに合わせたい場合は、UIのRawImageバージョンを使うと簡単に出来ます。

      RawImageを選択し、

      RawImageを画面サイズに合わせる

      ↑のように赤い四角の部分を縦、横ともにStretchにすると、RawImageが画面サイズに合わせて変更されます。

      縦横が画面サイズになる為、動画のアスペクト比も変わります。

      画面サイズに合わせて、動画のアスペクト比の調整が必要になります。

      アスペクト比を変更したい時は、画面サイズがScreen.widthとScreen.heightで得られるので、それを使って比率を計算すると思うんですが、やり方を忘れました・・・。

      Planeの場合は3D空間上に存在する物体になり、カメラの位置関係等もあるので、画面サイズに合わせるのは難しいかもしれません(用途としては街頭ビジョンとか)。

      カメラの位置や角度と、Planeの位置関係を調整して画面全体に表示されているような表現は可能かもしれません。

      あとは、UnityのスクリプトリファレンスのCameraのプロパティが使えるかもしれません。

      https://docs.unity3d.com/jp/current/ScriptReference/Camera.html

      どうしてもPlaneと言う事であれば、わたくしはお力になれません。(._.)

  3. 通りすがり より:

    unity2Dの動画再生で情報を探していたところで、たいへん参考になりました。