こんにちは、エンジニアのオオバです。

複数の動画ファイルをUnityプロジェクトにインポートしたタイミングでトランスコードしたくなる時があると思います。はい、先日のオオバの状態です。

動画ファイル未同梱 のgit管理されたUnityプロジェクトをアプリビルドした時の話です。
ジェンキンスのジョブの中でSVNから動画ファイルをチェックアウトし、Unityプロジェクトにインポート & トランスコードを走らせる場合、インポートのトリガーでトランスコード処理を走らせないといけません。
※なぜgit管理のUnityプロジェクトに動画を含めないかというと、1ファイル100MBを越えていてpushできなかったからです

そこで動画用のアセットインポーターについて調べました。

毎度おなじみAssetPostprocessorクラスを使用します。
ちなみに動画ファイルは下記のような気の利いたメッセージ関数は用意されておりません。

OnPreprocessMovieとかOnPreprocessVideoとかあれば良いのですが、Unity2017.2.0f1時点では存在しません。

しかしUnity5.6の時点でVideoClipImporterが存在するためこれを使用します。

Unity - Scripting API: VideoClipImporter

ソースコードはコチラ
UnityのVideoClipImporter · GitHub

このようにOnPostprocessAllAssets関数とAssetImporter.GetAtPath()を使ってVideoClipImporterを見つけて処理をさせます。

Unityの動画アセットのポストプロセス方法_0

一連の設定が可能です。

無事にジェンキンスでアプリビルドすることが出来ました。

◆2017.10.10追記
出来ていませんでした!!!

あくまでOnPostprocessAllAssetsはファイルのインポート後の処理なので、その時点でインポート処理は走らせることが出来ません。もし走らせてしまうと、無限ループに陥ってしまい、Unityを再起動しないといけなくなります(他の回避方法があれば知りたいです)。

ということで、解決案としてビルドする前に、以下の処理を走らせてインポート処理を実行することで意図した挙動になります。

ImportVideoClip.cs · GitHub

オススメ記事
検証環境