torano111
(torano111)
1
あるPersistentレベルから別のPersistentレベルへの遷移をOpenLevelで行っていたのですが、これを非同期で行いたいと思い、以下の記事を参考にAsset Managerを使って非同期にマップをロードしてから遷移するようにしました。
これでレベル遷移は非同期にできるようになったのですが、遷移後にEQSQueryを走らせると常にStatusがFailedを返すようになってしまいました。そこでPIE実行し、レベル遷移後にF8 > Pを押したところナビメッシュがなくなっているみたいでした。
OpenLevelのみを使ったりそのマップでPIE実行すると問題なく動いているので、バグでなければ非同期ロードあたりに問題があるのではないかと思うのですが、自分では解決できませんでした。
どうにか解決する方法はないでしょうか。よろしくおねがいします。
ちなみにNavMeshBoundsVolume/RecastNavMesh-Defaultを消して再生成したりBuild Pathsしたりといったことは試しましたが効果はありませんでした。他にもForceRebuildOnLoadをTrueにしてみましたがダメでした。
環境
Windows 10
UE 4.26.0(ランチャー版)
Navigation Meshの設定
Asset Managerの設定
StaticなNavMeshは、PersistentLevelか、常時ロード状態にあるSubLevelになければ動作しません
ですので非同期ロードするSubLevelにはNavMeshを置かないようにしましょう
NavMeshがDynamicの場合は非同期ロード対象のSubLevelでも動作します
予測ですが、ロード時にNavMeshの有効化と初期化がなされると思うので、既存のLevel上にNavMeshがある場合、新しい方のNavMeshが初期化されないのではないでしょうか
OpenLevelで切り替わったときには古い方のNavMeshはアンロードされますが、新しい方のNavMeshはロードタイミングを逃しているので再ロードされず、NavMeshが消失する、という動きになっているように思います
AssetManagerで非同期ロードするなら、PersistentやNavMeshのあるSubLevelは事前ロードせず、レベルギミックのおいてある重いSubLevelのみ事前ロードするように切り分けたほうが良いような気がします
torano111
(torano111)
4
ありがとうございます。
Subレベルへの遷移ではなくて、Persistentレベルから別のPersistentレベルへの遷移です。
OpenLevelノードのみだとStaticでも問題ないみたいなのですが、Persistentレベルを非同期ロードする場合DynamicでないとNavMeshは動作しないのでしょうか?
torano111
(torano111)
5
重い部分だけサブレベルに分けて、PersistentレベルをOpenLevel後LoadStreamLevelで非同期ロードするようにしたらそんなにカクツキなさそうだったのでこの方法でよさそうです。
ありがとうございました。