Más contenido relacionado
La actualidad más candente (20)
Similar a UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD (20)
Más de エピック・ゲームズ・ジャパン Epic Games Japan (20)
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
- 4. お題目
• レプリケート
• 遅延
• RepNotify
• RPC
• ReliableとUnreliable
• RPCと帯域
• 帯域幅設定
• レプリケートとRPCの使い分け
• DedicatedServer
• ListenServerとの違い
• Cosmetic
• 遷移フロー例
• 負荷軽減
- 6. レプリケート
• サーバー上にあるアクターをクライアント上で再現するための情報伝達
• サーバー上で生まれた、AActor::bReplicatesがtrueのアクターが対象
• そのアクターのうちReplicate対象と指定されているプロパティのみが対象
• UPROPERTY(Replicated) or UPROPERTY(replicatedUsing=xxx)
• 送信されるのは変更された部分のみ
• デフォルトで対象になっているアクター
• GameState、PlayerController、PlayerState、Pawn
• 逆にレプリケートされないアクター
• GameMode、AIController、Hud関連、GameInstanceなど
• 送信間隔は、帯域幅やAActor::NetPriority、Aactor::NetUpdateFrequencyなどの
影響を踏まえて制御される
• うまく扱えば与えられたネットワーク帯域を効率よく利用したコードが書けます
• 遅延することはあれど、サーバー上のプロパティはいつか必ず同期される。
- 9. プライオリティについて補足
• プライオリティ値
• おおざっぱにいって 「前回送信してからの時間」*
「ActorNetPriority」
• 前ページのようにそのTickで送信できなかったアクターは時間が伸びてすこしず
つプライオリティが上がります。
• つまり、帯域が飽和している状態続いた場合、
NetPriorityの設定によって送信間隔がかなり変わる可能性があります
• 参考ソースコード
• AActor::GetNetPriority
• オーバーライド可能なのでタイトルに合わせて自由に実装することも可能
• FActorPriority::FActorPriority
- 37. Unreliable
• 特徴
• マルチキャストとそれ以外で挙動がちょっと違う
• ClientとServer
• 呼び出し回数分リクエストが送信される
• 再送制御が無いので、パケットロストした場合は失われる
• Multicast
• これだけ挙動が違っていて、RPCリクエストは一旦バッファに蓄積されて、
アクターのレプリケート時に一緒に送信される
• つまり送信が遅延する
• バッファに蓄積された「同じRPC」が一定数を超えた場合、
送信すらされずに破棄される
• 送信回数はパケロスが無かったとしても、保証されません
- 53. RPCについてまとめ
• 即座送信や再送制御は便利
とても頼りがいがある
• 呼び出し回数については注意が必要
UnreliableMulticastRPCは間引かれたり遅延したりする
Reliableは回数保証
• 引数のデータサイズに気を付ける
FHitResultとかを引数にいれてはいけません
• 大量に呼び出すと
通信帯域を食いつぶしてレプリケーションが断続的に動作しなくなる事がある
せっかくNetPriorityやFrequencyを設定してもすべて無意味に
• ターゲットに合わせて通信帯域を設定
- 56. それぞれの特徴
• ReliableMulticastRPC
• とても重要でサーバー側が呼び出した回数分処理される必要があるもの
• ロストしない
• 即時送信
• 大量に呼び出されるとレプリケート帯域が悪化するので注意する
• 信頼性が高い
• UnreliableMulticastRPC
• 最悪メッセージがロストする
• 遅延する
• 連続送信してしまったときに間引かれれる
• 大量送信に対する保険
• 帯域は消費する
• UnreliableClientRPC
• 即時送信&ロストを許容
• Replicate+ClientRPCで値の変化を約束しつつ、即時性を与えるという組み合わせも考えられる
• Replicate
• プロパティを書き換える事が必要
• いつか必ず同期する
• 遅延しても良い情報はReliableMulticastRPCではなくReplicateを使うべき
• 送信間隔による変化のロストや遅延が考えられる
- 68. ListenServerとの違い
• 低コスト
• RPCやReplicateの仕組みを使っていればネットコード自体は基本同じ
• DedicatedServerはviewportが無い
• ローカルのカメラも無い
• AController::IsLocalController() == true のPlayerControllerが無い
• グローバルIPを割り当てることができる
• NAT越え不要
• 大半のプレイヤーがトラブルなく接続できる
• データセンターは基幹回線網に接続されているのでpingも良い
• 自律的に動く
• コンソールコマンドなどで直接操作はできない
• クライアントからRPCを送信して操作する
• 外部のゲームサーバー管理サーバーと通信して操作する
- 82. 謝辞&参考資料
• イラスト屋様
• バイキングスタッフ
• CedricさんのUE Network解説ドキュメント
http://cedric-
neukirchen.net/Downloads/Compendium/UE4_Network_Compendiu
m_by_Cedric_eXi_Neukirchen.pdf
• 公式ドキュメント
• UE4 Auswerhub
Notas del editor
- 本日のお題目はこのようになっておりますRPCレプリケートなどについて補足後、デディケートサーバーを扱う時のTIPSというながれで話させていただこうと思います。
- まずはこれです。
- 公式ドキュメントを開くと目につく表だと思うのですが、最初見るとよくわからないこれRPCは赤枠で囲った所の挙動が重要です。
- まずはシンプルなものから話します。サーバーRPCです
- Autonomous オータァナァマァス
- 次にクライアントRPCです。特定のクライアントを指定して送信します。
- リライアブル
- ちなみに Lanなんとかと書いてある設定値は –lanplay コマンドライン引数に入れた時に適用されます。
- ゲームロジックに影響を与えないコンポーネント - 例えばパーティクルのようなもの - はTick単位でDedicatedServer上で動作をカットすることができます。
- おまけ