はじめに
Asset Managerのアセットの非同期ロード機能について その1 ( 非同期ロードの解説 & レベルの裏読み編 )
こちらの記事を参考にAssetManagerを用いた非同期ロードを実装したところ、パッケージ後のみ動作しない現象に遭遇したのでその対処法について書いていきます。
具体的な症状
AssetManagerでの非同期ロードについてよく知らない方は「はじめに」に記載された参照先の記事で分かりやすく解説されているのでそちらを読むことをおすすめします。
このように処理を組み非同期ロードをして、完了したのちにOpenLevelでレベルを移動するようにしました。
一見問題ないように見えますし、PIEでもStandaloneでも問題なく動作しますが、パッケージ後だと正常に読み込まれません。
原因について
GetPathNameの戻り値の文字列を確認してみたところ、
[ファイルパス]/[レベル名].[レベル名]
の形で出力されました。
解決策について
GetPathNameの戻り値の.以降の拡張子にあたる部分が問題かと思い、以下のように文字列を処理しました。
Splitノードは戻り値を見ればわかりますが、ファイルパスをパスとファイル名と拡張子に分離するノードです。
分離した後に[パス]/[ファイル名]という形にすることで.以降の部分を無くしています。
このように.以降の部分を無くすとエディタ上でもパッケージ後も正常に動作するようになりました。
おわりに
私の場合、非同期ロード→OpenLevelの処理をGameInstanceに実装し、外部から呼び出して使う形で実装していてそこに問題があるかと思いましたが、この記事を書くにあたりレベルブループリントに実装したものも作ってみましたが、同様の動作でした。
したがって、おそらくGetPathNameの戻り値の.以降が問題だろうと思いますが、間違いや補足などありましたら、コメントなどで教えていただけると嬉しいです。