blogプログラムやゲーム、旅、愛する家族について綴っていきます。2017-11-22【UE4】GameMode、GameState、PlayerState、PlayerControllerの関連を確認してみるUE4GameModeとGameStateとPlayerStateの関連について再度確認してみる。「PlayerStateは?PlayerControllerは?」とその都度確認しているので再度確認してみる。各クラスの概要UE4のオフィシャルドキュメント。State簡単にまとめると以下の通り。GameModeサーバーにしか存在しないGameState各マシン毎に存在PlayerArrayという変数でプレイヤ分のPlayerStateを保持Ownerは持たない(GetOwner()はnullptr)PlayerState全てのマシン上で、全てのプレイヤーに対してPlayerStateが存在OwnerはPlayerController(GetOwner()でPlayerControllerを返す)PlayerController操作しているPawnを所持(GetControlledPawn()で操作しているPawnが取得できる)Ownerは持たない(GetOwner()はnullptr)Playerが操作しているPawnSpawnされてPossessされるとPlayerControllerに所有されるシングルプレイ、マルチプレイでの構成について確認してみる。シングルプレイの場合マルチプレイの場合ServerClient1Client2確認パーシスタントレベルにBPを組んでログで確認。MyPlayerControllerマルチプレイServerGameModeもGameStateもClinet含めたPlayerStateもPlayerController、PlayerPawnも全て生成されていることが確認できる。PlayerPawnは必ずしも順番通りにはならいことに注意。MyPlayerController2Client1クライアントの場合はGameModeは生成されていない。GameStateは生成されてPlayerArrayを回すとPlayerState自体はプレイヤー人数分取得できる。PlayerControllerは自分のみ生成されている。PlayerPawnはプレイヤー分生成されない。実際に2人分のみが生成されていることが分かる。他の端末との距離や表示範囲などで同期が必要ない場合はSpawnされない。一定範囲や描画されるなどで同期が必要になったタイミングで初めてSpawnされる。同期取りたい場合はPawnのプロパティにAlwaysRelevantを有効にすることで必ず同期を取るようになるので最初にSpawnされるようになる。MyPlayerControllerAlwaysRelevantを有効にした場合は全員Spawnされている。MyPlayerPawn2Client2Clinet2も同様。バージョンは4.17.0。はてなブログProプログラムやゲーム、旅、愛する家族について綴っていきます。C++はてなブログをはじめよう!takezoh_1127さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。