MovieTextureの具体的な使い方

  • 12
    いいね
  • 0
    コメント


本記事はUnity5.5までを対象としたものです。
Unity5.6移行からVideoPlayerが実装されるので
そちらを使用することをお勧めします。

Unityで動画を再生したいときにMovieTextureを使う方法があります。
公式のマニュアル( http://docs.unity3d.com/ja/current/Manual/class-MovieTexture.html )だと
「対応フォーマットの動画ファイルをプロジェクトに入れると自動的に変換される。
変換にはQuicktimeが使われるのでインストールしておく必要がある。」

と言うような事が記載されていますが、Windows版QuickTimeはセキュリティの
問題を残したままバージョンアップが停止しており事実上使用できません。

また、マニュアルに記載されている内容だと具体的な方法が
わかりにくいので実際に動画を再生する方法をまとめることにしました。

1)動画データを用意する

MovieTextureは実際にはogvを再生しているようなのでUnityによる変換を使用しないで
予めogvを用意しておきます。ogvはffmpegで変換可能です。
ビルド済みのffmpegは https://ffmpeg.zeranoe.com/builds/ あたりで手に入ります。

変換例

enc.bat
ffmpeg -y -i "title.mp4" -b 8M -ab 128k "title.ogv"

2)Unityのプロジェクトに配置する

変換したogvファイルをStreamingAssetsフォルダにコピーします。

3)再生するためのスクリプトを書く

MovieTextureはInspectorでマテリアルにテクスチャとして設定という
流れではなくMovieTextureを扱うスクリプトを書きます。
これをそのままコピペして使用しても構いません。

Movie.cs

    using UnityEngine;
    using System.Collections;

    public class Movie : MonoBehaviour {

        public string _movieFile;

        // Use this for initialization
        void Start () {

            StartCoroutine(moviePlay(_movieFile));
        }

        // Update is called once per frame
        void Update () {

        }

        private IEnumerator moviePlay(string movieFile)
        {
            string  movieTexturePath    = Application.streamingAssetsPath + "/" + movieFile;
            string  url                 = "file://" + movieTexturePath;
            WWW     movie               = new WWW(url);

            while (!movie.isDone) {
                yield return null;
            }

            MovieTexture movieTexture = movie.movie;

            while (!movieTexture.isReadyToPlay) {
                yield return null;
            }

            var renderer = GetComponent<MeshRenderer>();
            renderer.material.mainTexture = movieTexture;

            movieTexture.loop = true;
            movieTexture.Play ();

    #if false
            //オーディオを使用する場合はこの部分を有効にしてください
            var audioSource = GetComponent<AudioSource>();
            audioSource.clip = movieTexture.audioClip;
            audioSource.loop = true;
            audioSource.Play ();
    #endif
        }
    }

4)コンポーネントを設定する

GameObjectにスクリプトを設定すると動画を再生するGameObjectになります。
(マテリアルは何か適当なものを設定しておきましょう)

設定例

unity_movietexture_inspector.jpg

余談

再生するとエラーが出ますが調べてみたところ
どうやらUnity側のバグのようです(5.4でも未解決だそうです)