ムービーを外部へ保存して扱う


mp4などのムービーをHandheld.PlayFullScreenMovieなどで使うときは、Unity用の変換がされないようにStreamingAssetsフォルダに格納する必要がある。
StreamingAssetsに置くとUnity用の変換がされず、生のデータとして扱えるけどムービーなどの大きなファイルの場合書き出した本体ファイルが大きくなってしまう。
そこで、アセットバンドルの仕組みでムービーを外部に置きたいけど、アセットバンドル構築の際に

‘MovieTexture’ is not supported when building for ****.

と怒られてしまう。

アセットバンドルはUnityで扱うデータをまとめたものなので、Unity用に変換されたデータしか扱えないようです。ここにmp4をプレーンな状態で入れることは、現状モバイルではできないようです。(ムービーテクスチャをサポートしていないので)
生のデータとしてムービーを外部ファイルとして扱いたいときにはアセットバンドルではなく直接mp4をウェブ上から読み込むかzipなどでDLしてきて解凍し、Application.persistentDataPathに保存するなど工夫が必要。
Application.persistentDataPathに保存する場合は、iCloudのバックアップ対象となってしまうのであまり大きな容量のファイルなどを対象にしてしまうと審査が通らないので

#if UNITY_IOS
UnityEngine.iOS.Device.SetNoBackupFlag(Application.persistentDataPath);
#endif

こんな感じでバックアップ非対称の属性を当てておく必要があります。

ちなみに、Handheld.PlayFullScreenMovieを使うときには、ファイルパスの頭に"file://"が必要です。
これを忘れると、Android/iOSどちらかは再生できるけどどちらかはできずでちょっとハマりました…

コメントを残す