マルチプレイヤーゲーム作成の基本のキ

345 Views

March 04, 23

スライド概要

profile-image

UE/Blender 富山の人間です

関連スライド

各ページのテキスト
1.

マルチプレイヤーゲーム作成の基本のキ pate UE歴:3年 https://twitter.com/mx_pate4 https://zenn.dev/pate_techmemo © 2023 Model ingX Inc. 1

2.

もくじ 1. UEにおけるマルチプレイの仕組み 2. ゲームプレイフレームワーク 3. RPCについて 4. チャット機能の例 5. まとめ 6. 参考文献 © 2023 Model ingX Inc. 2

3.

UEにおけるマルチプレイの仕組み © 2023 Model ingX Inc. 3

4.

Listen ServerとDedicated Server UEはClient-Serverモデルを採用している Client-Serverモデル ・・・ サーバーが全ての情報を管理し、Clientに同期する仕組み Listen Server Dedicated Server Dedicated Server Listen Server (Client + Server) Client Client Client Client © 2023 Model ingX Inc. Client Client 4

5.

Listen or Dedicated Listen Server メリット • • • 無料で実装可能 サーバーを構築しなくてよい 環境によってはDedicated Serverよりもレスポンスがよい デメリット • • • ホストに処理と通信が集中しやすい ホストの通信状態が悪いとセッション全体が重たくなる ホストが切断されると全てのセッションが終了する Dedicated Server メリット • • • 特定のClientに処理が集中せず、負荷が安定している 通信状態が他のClientの影響を受けにくい Clientが切断されてもゲーム進行は止めなくても良い デメリット • • • サーバー構築、保守、通信にコストがかかる ほぼ毎回ターゲットServerと一緒にパッケージ化が必要 ソースコードビルドしたエンジンが必要 © 2023 Model ingX Inc. 5

6.

ゲームプレイフレームワーク © 2023 Model ingX Inc. 6

7.

よくみるやつ・・・ © 2023 Model ingX Inc. 7

8.

ゲームプレイフレームワークとは BPクラスには様々な役割を持ったクラスが用意されている。 その中でもマルチプレイを実装する際に重要なクラスをご紹介。 © 2023 Model ingX Inc. 8

9.

ざっくりそれぞれの役割① GameInstance ゲーム中、永続的に存在するクラス。 ログイン時とログイン後でレベルが変わる場合は、ログ イン情報を保持できる唯一のクラスになる。 GameState サーバーとクライアントを繋ぐ仲介役 クライアントがアクションを起こしたとき、GameStateに反 映させてからクライアント全員に反映する、という動きを してくれる。 サーバー、各クライアントに存在する。 サーバー、各クライアントに存在するが、みんなで1つの GameStateを共有している。 GameMode PlayerControllerとお友達。 OnPostLoginやOnPostLogoutイベントが用意されていて、 ログイン、ログアウト時の処理ができる。PlayerController も取得できる。 Pawn PlayerControllerによくPossessされている。 GameModeでログインしたプレイヤーに対し、スポーンし たポーンにPlayerControllerをPossessする。話はそれか らだ。 サーバーにのみ存在する。クライアントはなし。 サーバー、各クライアントに存在する。 © 2023 Model ingX Inc. 9

10.

ざっくりそれぞれの役割② PlayerController マルチプレイの最重要人物。 自分のHPや所持アイテムなどを変更する際は、 PlayerControllerからサーバーに送る。Widgetに反映さ せる際もここを通して変更するので、サーバーへの窓口 はこちらです。 Widget Widgetのイベントが実行されたとき、PlayerControllerを 介してサーバーにイベントを送信する。 UIはサーバーには存在せず、所有クライアントにのみ存 在するので、サーバーからWidgetまで情報を同期する のにクラスを複数仲介させるのが面倒だったイメージ。 サーバーには全員の、クライアントは自分の PlayerControllerのみ存在する。 サーバーに存在せず、所有クライアントにのみ存在する。 PlayerState 名前の通りプレイヤーの状態を管理するクラス。 HPやスコアなど。マルチプレイ対戦ゲームを作るときは 必ず使うことになるかと。 サーバー、各クライアントに存在する。 © 2023 Model ingX Inc. 10

11.

RPC(リモートプロシージャコール) © 2023 Model ingX Inc. 11

12.

RPCとは ネットワーク越しに別環境の関数やイベントを呼び出す手法 BPではカスタムイベントを作成して使用する デフォルトは「複製しない」 「詳細」タブに設定項目が出てくる カスタムイベントを選択 © 2023 Model ingX Inc. 12

13.

RPCについての参考 https://historia.co.jp/archives/12823/ © 2023 Model ingX Inc. 13

14.

チャット機能の例 © 2023 Model ingX Inc. 14

15.

実例 メタバース空間 個人からチャットを送信すると空間内にいる全員にメッセージが表示される 日付:時刻:プレイヤーネーム:メッセージ が送信される メッセージを打ち込む © 2023 Model ingX Inc. 15

16.

送信 → 全員に表示までの流れ Widget PlayerController GameState RPC(サーバーで実行)で メッセージを送信 仲介役としてサーバーに送信 Chat Message配列に格納 RepNotify 格納されたメッセージをWidget に送信 メッセージを表示 © 2023 Model ingX Inc. 16

17.

全員に送信できる仕組み サーバーならAuthority クライアントならRemote © 2023 Model ingX Inc. 17

18.

もう少しわかりやすく・・・? サーバーはSwitchHasAuthorityで 処理が止まる Chat Message配列に格納される メッセージを サーバーに送信 Hello Client Server RepNotify RepNotify Hello Hello Hello Client Client Client © 2023 Model ingX Inc. 18

19.

まとめ • ListenServerとDedicatedServerがあり、それぞれにメリットデメリットがある。やりたいことによって使い分けよう。 • UEにはマルチプレイゲームを作るのに必要なクラスが用意されている。役割を理解して使おう。 • RPC?所有権?Replicate?なんもわかんねぇ! • 作って覚えましょう。 もっと詳しく知りたい、質問等あればお声掛けください。 © 2023 Model ingX Inc. 19

20.

参考文献 • Epic公式 https://docs.unrealengine.com/5.1/ja/networking-and-multiplayer-in-unreal-engine/ • alweiさんのブログ https://unrealengine.hatenablog.com/entry/2021/02/23/232048 • historiaさんのブログ https://historia.co.jp/archives/12823/ • タケゾーさんのブログ https://www.main-function.com/entry/2017/11/22/220527 © 2023 Model ingX Inc. 20