こんにちは、エンジニアのオオバです。
複数の動画ファイルをUnityプロジェクトにインポートしたタイミングでトランスコードしたくなる時があると思います。はい、先日のオオバの状態です。
動画ファイル未同梱 のgit管理されたUnityプロジェクトをアプリビルドした時の話です。
ジェンキンスのジョブの中でSVNから動画ファイルをチェックアウトし、Unityプロジェクトにインポート & トランスコードを走らせる場合、インポートのトリガーでトランスコード処理を走らせないといけません。
※なぜgit管理のUnityプロジェクトに動画を含めないかというと、1ファイル100MBを越えていてpushできなかったからです
そこで動画用のアセットインポーターについて調べました。
毎度おなじみAssetPostprocessor
クラスを使用します。
ちなみに動画ファイルは下記のような気の利いたメッセージ関数は用意されておりません。
- OnPreprocessAudio
- OnPreprocessModel
- OnPreprocessTexture
- OnPreprocessAnimation
OnPreprocessMovieとかOnPreprocessVideoとかあれば良いのですが、Unity2017.2.0f1時点では存在しません。
しかしUnity5.6の時点でVideoClipImporter
が存在するためこれを使用します。
Unity - Scripting API: VideoClipImporter
ソースコードはコチラ
UnityのVideoClipImporter · GitHub
このようにOnPostprocessAllAssets
関数とAssetImporter.GetAtPath()
を使ってVideoClipImporterを見つけて処理をさせます。
一連の設定が可能です。
無事にジェンキンスでアプリビルドすることが出来ました。
◆2017.10.10追記
出来ていませんでした!!!
あくまでOnPostprocessAllAssets
はファイルのインポート後の処理なので、その時点でインポート処理は走らせることが出来ません。もし走らせてしまうと、無限ループに陥ってしまい、Unityを再起動しないといけなくなります(他の回避方法があれば知りたいです)。
ということで、解決案としてビルドする前に、以下の処理を走らせてインポート処理を実行することで意図した挙動になります。
この記事が気に入ったらフォローしよう
- Unity2017.2.0f1