#memo

indiedev太郎

シークエンス変移について、レベル、サブレベルについて、ロード画面について

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段階あって、単純にデータをメモリに展開(同期/非同期)、レベル内に表示/非表示、どこでロード終了扱いにするかは好きにする

https://i.gyazo.com/33ce8915b1a091b266e17ff4ff3c7706.png


お役立ちリンクとりあえず
Loading Screen - Epic Wiki
[UE4] レベルストリーミングについて | historia Inc - 株式会社ヒストリア