noyss
(noyss)
1
お世話になっております。
最近UE4を触りだしたのですが、基本的な設計について迷っております。
レベルをまたいで存在するActorを再読み込みせずに使用したいのですが
おすすめの設計などがありましたら、教えていただけますと嬉しいです。
例)
・メニュー→バトル→リザルトをレベルで分割する
・但し、上記分割はステージによって数や構成が変わる可能性があり
名前解決などで遷移を自動化したい(ムービーパートを挟むなど)
・その際、全部のシーンでプレイヤーモデルのActorは表示される
・武器/防具切り替えなどでプレイヤーモデルのActorのセットアップにコストがかかりそう
■気になっている事
・レベルを切り替えた際にプレイヤーモデルの再読み込みやセットアップが
発生して遅くなっていないか。
■調べた事
・GameInstanceでシーンに関わらず変数を保持出来るようなので、どうにかして
GameInstanceにActorを持たせておく
・パーシステントレベルとサブレベルに分けておき、パーシステントレベルに
Actorを置いておく。
ただ、この方法だと実行時に登録されているサブレベル一覧が取れる方法が
分からなかったため、別途遷移テーブルを書くなどでごり押しが必要そうで躊躇している
・もしかしたらリソースのキャッシュが効いている可能性もあるのですが
調べる方法が分からず、どちらにしてもセットアップでコストを払っていそうで
躊躇している。
みなさんがこのような時、どのように構成しているか教えていただけますと幸いです。
よろしくお願いいたします。
alwei
(alwei)
2
本来レベルを跨いでアクターが存在するようなことはあってはなりません。
なので、一番まともなやり方としてはパーシスタントレベル上でアクターを管理し、サブレベルとして個別にレベルを読み替える方法が無難です。ただ、読み込みそのものが気になるのであれば、そもそもレベルの読み替えを行わず、レベルストリーミングを使って裏読みを行うなどの工夫も必要になってきます。
なお、GameInstanceにアクターをもたせるような方法はレベルが切り替わる時点で完全に削除されてしまいますので、方法としてそもそも不可能と言えます。
noyss
(noyss)
3
教えていただきありがとうございます。
やはりパーシスタントレベルに保持するのが一般的なのですね。
その方向で設計してみようと思います。
ちなみに、その場合にパーシスタントレベルから自分が保持する
サブレベル名等を取得したりして有る程度登録作業を自動化したいと
思っているのですが、そのようなブループリントor関数などは
あったりするのでしょうか。
もしくは情報が取れない場合は、ランタイム時に特定フォルダの
レベルブループリントのリストなどから動的に生成する事も考えているのですが
そのような事が出来たりするものなのでしょうか。
リファレンスを見てみたのですが、そのあたりの情報が見つからず
もし有るようでしたらURLなどだけでも教えていただけますと幸いです。
よろしくお願いいたします。
alwei
(alwei)
4
Get Streaming Levelノード or 関数を利用をすることでサブレベル自体を取得することが可能です。使い方は以下の記事が参考になります。