はじめに
UE4にはMedia Frameworkという機能があり、この機能のおかげでmp4などの動画ファイルを簡単に再生することができます。
https://docs.unrealengine.com/ja/Engine/MediaFramework/HowTo/index.html
しかし、以下のページに書かれている通り、動画ファイルを「Content/Movies」に入れてパッケージングしないと実行ファイルでは正しく動画が再生されません。
https://docs.unrealengine.com/ja/Engine/MediaFramework/HowTo/FileMediaSource/index.html
ただし、上記の手順を踏んだ場合、動画ファイルがpakファイルに含まれずそのままパッケージに格納されるため、動画ファイルがユーザから丸見えという問題があります…
解決方法①
追記:Mac, iOS, tvOSの場合はこの方法ではエラーが出るので後述の「Content/Movies」以下に動画ファイルを置く方法を使用して下さい
実はこの問題、プロジェクト設定/Packagingにある Additional Non-Asset Directories to Package
機能を使うことで回避可能です!
Additional Non-Asset Directories to Package
は.uasset/.umap
形式以外のファイルもpakファイルに含めるための機能です。そのため、例えばPakMoviesというフォルダに動画ファイルに格納した後に上図のように設定することで、動画ファイルをpak内に隠蔽しつつ正常に動画再生することが可能になります。
ちなみに、iniファイルに直接書きたい場合はDefaultGame.iniに以下のように追記します。
[/Script/UnrealEd.ProjectPackagingSettings]
+DirectoriesToAlwaysStageAsUFS=(Path="PakMovies")
解決方法②
先程説明したとおり、「Content/Movies」以下にある動画ファイル(正確には.uasset /.umapファイル以外)は強制的に外部から丸見え状態でパッケージに含まれます。この挙動を制御するための項目がUE4.22から追加されました。
Exclude movie files when staging
を有効にした場合、「Content/Movies」以下にあるSpecific movies to Package
で指定された動画ファイルのみをpakファイルに含めるようになります。そのため、今回のケースでは上図のように設定することになります(Specific movies to Package
の設定項目には拡張子は含めてはいけません)。
Additional Non-Asset Directories to Package
はフォルダ単位の大雑把な管理でしたが、この追加機能を使うことで動画ファイル単位での細かい管理が可能になります!
具体的にどのような処理をしているのか興味のある方は、
Engine\Source\Programs\AutomationTool\Scripts\CopyBuildToStagingDirectory.Automation.cs
の CreateStagingManifest
関数をご確認くださいまし。
まとめ
プロジェクト設定/Packagingにある項目を活用して、見られたくない動画ファイルはpakファイルにどんどんしまっちゃおうね~
おしまい
おまけ
Additional Non-Asset Directories to Package
に Content/Moviesフォルダを設定してもpakファイルに隠蔽されないのでご注意を