【輪講】UE4ネットワーク

こんにちは。
今回はUE4のネットワークについて書いていきたいと思います。

まずUE4でネットワークゲームを作る際、最低限知っておかなければいけない4点を詳しく書いていきます。

・サーバー/クライアント
・レプリケーション
・アクターの所有権
・PRC(リモートプロシージャコール)

上記4点の仕組みをしっかりと理解すればUE4で簡単なネットワークゲームを作れると思います。

まずは、サーバーとクライアントについての説明です。

UE4のネットワークはクライアント・サーバーモデルを採用しています。
ただし、UE4はエンジンがクライアント、サーバー両方をこなせる仕組みを持っています。

最初からエンジンコアの部分でネットワークに対応する設計になっているので、
シングルプレイヤーのゲームをマルチプレイヤーにするのもすごく簡単になっています。

これはプログラマーとしていいのか分かりませんが、
C++のコードを書かなくてもブループリントのみでマルチプレイヤーのゲームが作れるようになっています。

サーバーについての説明をします。
ネットワークにおける最高権限を持ち、ゲームプレイフローを管理します。
クライアントはサーバーにログインしてから、あらゆる情報に従う必要があります。

ListenサーバーモードとDedicatedサーバーモードがあります。
どちらを使用しても役割自体はかわりません。

【Listen = 聴く】
Listenサーバーモードはクライアントと同じようにゲームプレイを行う事が可能で
サーバー機能を有しつつもクライアントのように動作します。

利点は見た目にも動作がわかりやすく、テストプレイもしやすいです。
特に問題がなくさくっとマルチプレイゲームを作りたければListenサーバーモードを使いましょう。

【Dedicated = 専用】
Dedicatedサーバーモードはいわゆる完全なサーバー専用モードです。
クライアントのような画面はありません。
cmdのような真っ黒い画面上でも動作します。

最低限のリソースで動作し、クライアントを処理するのにフルスペックで動作するので、
比較的大規模なネットワークのマルチプレイヤー向けのモードです。
MMORPGとかを作るのであればこちらを使用するのがいいんじゃないでしょうか。

クライアントについて。
サーバーにログインして、各々の見た目の部分を担当します。
ゲームロジックの処理はサーバー側にお任せです。

ただし、自分がコントロールするPlayerControllerの情報を随時サーバー側へと送信してあげる必要があります。

これをしないとサーバーとそれぞれのクライアント上で自分の情報が反映されなくなってしまいます。

エディタ上ではどちらのサーバーを使うのか、何人でやるのか設定する事が出来ます。

%e7%84%a1%e9%a1%8c1

1でプレイ人数(人数分ウィンドウが出ます。)
2でどちらのサーバーを使用するのか設定します。(チェックなしの場合Listenサーバー。)

設定を終えてからプレイボタンを押すと、

%e7%84%a1%e9%a1%8c2

このように自分が設定した人数分のウィンドウが出ます。
(上の画像はListenサーバー、人数は二人で設定してあります。)

ウィンドウの枠の部分にこのウィンドウはサーバーなのかクライアントなのかが画像の赤く囲ってある部分に表示されます。

次にレプリケーションについてです。
レプリケーションとは何!?って方が大半だと思いますのでレプリケーションの説明からしていきます。

【レプリケート = 複製】

レプリケーションとは『複製する』という意味です。

レプリケーションするものは基本的にアクターと変数です。
ではなぜアクターと変数をレプリケーションする必要があるのかを説明します。

1vs1の対戦ゲームがあると仮定します。
AさんがBさんを攻撃をした場合、必ずBさん側の画面のAさんも攻撃を行っていなければHPなどに差異が生じてしまいます。

ここでレプリケーションを使用します。
キャラクター(アクター)をサーバーにスポーンさせ、アクターのレプリケーションをすることによって、
アクターの情報が各クライアント間で差異が生じないように同期するようになります。

これをネットワークレプリケーションと呼び、UE4では何をレプリケートするかを選択する事が可能です。

レプリケーションはサーバーのみが行う事が出来ます。
クライアントはサーバーに対してレプリケーションして欲しい情報を送信する必要があります。

つまりサーバーとクライアントか判断してロジックを変更して動かしてあげる必要があるのです。

続いて所有権についてです。
サーバーで所有しているのかクライアントで所有しているのかによってブループリントの書き方が変わってきます。

例えばレプリケートしなければいけないものはサーバーが所有権を持つ必要がありますし、
クライアントだけ実行すればいいものはクライアントが所有権を持っておく感じです。

クライアント上のアクターはレプリケートされませんので、
ロジックやダイナミクスを含むアクターは基本的にサーバーでスポーンしておくといいでしょう。

最後にPRC(リモートプロシージャコール)の説明です。
RPCとはネットワークの先にある環境で関数やイベントを実行する事です。

UE4では標準で3つの呼び出し方法が存在します。

ブループリントではカスタムイベント(関数みたいなもん)を作成して使用します。

a

デフォルトでは『Not Replicated(複製なし)』になっているので、状況に応じて設定しましょう。

3つの呼び出し方法をそれぞれ解説していきます。

【MultiCast】
multicast
呼び出しをサーバーで行うと全てのクライアントで処理が実行されます。
最も一般的なRPCイベントです。(Server to Client)

クライアント側で呼び出しても、クライアント内でしか処理されません。

【Run on Server】
runonserver
呼び出しをクライアントで行うとサーバー上で実行されます。
ただし、アクターの所有権が必要となります。(Client to Server)

サーバー上で呼び出しても、クライアント上へレプリケートしません。

【Run on Owning Client】
runonowningclient
サーバーから呼び出した場合に、
アクター所有権のあるクライアント上でのみ実行される特殊なRPCイベントです。

クライアントで呼び出しても、クライアント内でしか処理されません。

これら3つの使い分けですが、
【MultiCast】はサーバーから全てのクライアントで同期する際に一番頻繁に使用します。

【Run on Server】はクライアントからサーバー上へ何かしら情報を通知したい場合に使用します。
変数値を同期させる場合にも使用するので非常に重要です。

サーバー上で変数値を反映させれば自動的にレプリケートされます。

【Run on Owning Client】は最も特殊で、アクター所有権を自分で管理しておく必要があります。
つまり、サーバーはそのアクターを誰が所有しているのかを理解しておく必要があります。

特定クライアントに対してのみのRPCイベントを行う際にはこの仕組みを使用します。
また、サーバーがアクター所有権を持っている場合もあり、その場合には名前に反してサーバー上で実行されます。

この3つ(特にMultiCastとRun on Serevr)を使わないとまずネットワークのゲームが作れません。
ですので、しっかりとそれぞれの役割や動きを理解しましょう。

今回は時間の都合上セッションの作成/検索/参加/破棄について説明出来ませんでしたが、
UE4にはオンラインサブシステムと呼ばれる非常に便利なものがありますので、もし作る方がいたら自分で調べてみて下さい。

以上4点をしっかりと理解すれば誰でも簡単にマルチプレイヤーゲームを作る事が出来るので興味がある方はぜひ作ってみて下さい!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です