シークエンス変移について、レベル、サブレベルについて、ロード画面について
UE4のシークエンス変移系まとめ
・BPで用意されてる関数は二つあって、一つはOpenLevel、もう一つはLoadStreamLevel
・LevelはどれもPersistentLevelが親、その子としてStreamingLevelを持てる構造をしている、孫はなし
・OpenLevelはPersistentLevelの切り替えで、LoadStreamLevelは現在のLevelが持っているStreamingLevelのロード(持っていないStreamLevelを指定しても読み込まれない)
・LevelCをStreamingLevelで持ってるLevelBを、LevelAでStreamingLevelに指定した時、孫階層までは持てないので、LevelB(のPersistentLevel)までしか読み込まれない
・例えばロード画面、現在のUIを生かしたままロードしたいとかなら、OpenLevelを使用すると現在表示してるWidgetが死ぬので、これはLoadStreamLevelでやる
・GameStateを使用すると、OpenLevelを使用しても変数を渡せるので、HUDの管理とかも出来そう
で、シークエンス変移結局どう作るのかがいいかなんだけれど、GameModeの割当がLevel毎で、これをランタイムに変更するのはできない、(もしかしたらできるのかもしれない)
だからゲームモード変わる部分では、OpenLevelでレベルを切り替えるのが良さそう
多分全部を同じゲームモード、同じレベルで作ることは可能なんだけれど、何もかもがごちゃごちゃしてくるのが予想できる
で、ゲームモード変わる部分ってそもそも何だなんだけど、タイトル画面とインゲームはなんか別っぽいなみたいな雑な感じで作る
でかいレベル読み込みは、時間かかって操作固まってしまうのも予想できるので、ローディング画面を出したい
OpenLevelにはCompleteノードがなくて、LoadStreamLevelにはある
なので、Openするレベルの構造は、パーシスタントレベルは空にして指定したStreamレベルをロードさせるようにする、こうするとOpenLevelした瞬間はLoadingウインドウを表示するようにして、StreamLevelの読み込みが終了したらこれを削除するようにすれば良い
あと読み込みは2段階あって、単純にデータをメモリに展開(同期/非同期)、レベル内に表示/非表示、どこでロード終了扱いにするかは好きにする
お役立ちリンクとりあえず
Loading Screen - Epic Wiki
[UE4] レベルストリーミングについて | historia Inc - 株式会社ヒストリア