【UE5】ゲームプレイフレームワーク
UE5の勉強とゲーム制作を始めてから1年以上経ってから、このタイトルの記事。
約1か月前に【UE5】PlayerStateとかを作る を書いたが、そこから殆ど進んでいない。
ゲームプレイフレームワークについての資料はそれなりに集めていたんだが、この人の動画が一番分かりやすかった。
GameMode:サーバーだけが持つ。
GameState:サーバーと全クライアントが持つ。
PlayerState:サーバーと全クライアントが持つ。
PlayerController:サーバーは全クライアント分を持っていて、各プレーヤーは自分の分だけ持つ。
自分のPlayerStateはPlayerControllerからGet PlayerStateだっけ?で、すぐにアクセスできる。全員分を取る場合は配列で取ってこれる。
Pawn&CharacterはPlayerStateに近いんだと思う。サーバーと全クライアントが持つ。
で、合っているのかな?
PlayerStateにはPing取得ノードがあって、簡単にPingを取って保持しておけるようになっている。これを各々のプレーヤーが全クライアント分、見ることができるわけだ。こうしたそれぞれのクラスにしかないような機能を調べたり覚えたりする必要がある。
よく分かっていないのが、GameStateとPlayerStateは何もしてやらなくても完全同期状態なのか?それか変数をレプリケーション定義しておくだけでいいのか?
Characterクラスとは何かちょっと違う気がしなくもない。俺はCharacterをC++とBPの2つで作っちゃって、特にC++でGetLifetimeReplicatedPropsをやっているせいで、BPだけで作っていたらどうなっていたのか、よく分からない。GetLifetimeReplicatedPropsを止めると同期できなくなることだけは確認してある。作り始めた頃はブループリントが全然分からなかったからC++で作ってしまったが、今ならブループリントで作る。
あと、どこかの資料で読んだが、キャラクター名やHP、MPなどはPlayerStateで持った方がいいらしい。スマートに作れるとか。スマートじゃなくていいならCharacterクラスで持っても作れないことはないんだ。ただし、他のクライアントからはアクセスしにくいってことになるんだろう。ここら辺を作っていくコツとかが分かっていないから、どうしていいのかもよく分からない。
更にGameSessionをどうすればいいのか。ブループリントで定義したGameModeからC++のGameSessionに簡単にアクセスできるのかどうか。
これからどうしていけばいいんだろうか?
今まではキャラクターを中心に作ってきた。これからはGameMode側から作っていくべきなのか?
次の動画を拝見してから考える。
こういう動画がほんとに助かる。