渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

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


f:id:esakun:20150730215258g:plain

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

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

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

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

  • OnPreprocessAudio
  • OnPreprocessModel
  • OnPreprocessTexture
  • OnPreprocessAnimation

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

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

ソースコードはコチラ

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

f:id:esakun:20171005170844p:plain

一連の設定が可能です。

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

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

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

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

環境

  • Unity2017.2.0f1

最後に

久々にブログを更新。今日から頑張る。続けるの大事。