BLOGブログ

2023.08.16UE5UE/ 初心者向けUE/ Network

[UE5]ネットワークコンテンツにおける情報の伝達について

執筆バージョン: Unreal Engine 5.2

■はじめに

こんにちは、エンジニアの山中です。

今回はネットワークコンテンツにおける情報の伝達について

具体例を用いてご紹介します。

■実践

2人プレイのネットワークゲームを制作すると仮定して

接触した際にランダムな色に変化する箱を作ってみましょう。

〇下準備(エディター設定)

下記の画像の設定をそれぞれ変更しましょう。

これでDedicatedサーバ + クライアント2人の環境が

エディターで確認可能になります。

〇色が変化する箱の作成

Actorを作成して、見た目となるMeshを追加します。

処理はとりあえず下記のように組んでみました。

キャラクターが接触した際に、先程追加したMeshのマテリアルをランダムな色に変化させる処理です。

この状態で一度起動し、キャラクターを接触させてみましょう。

■発生する問題

クライアント環境それぞれで異なる色に変化してしまいます。

これは現段階でネットワークを考慮した実装になっていない為です。

今回はこの色の統一がゲーム性に関わる重要な処理であると仮定し、

 クライアント2人の環境で同じ色になるように実装を考えてみましょう。

■実装について

〇ランダム値を確定させる環境を決める

まず、各環境で勝手にランダム値を決定してしまうのは問題ですので

サーバ環境、クライアント環境のいずれかで確定させた情報を

他の環境へ伝達する方針で実装してみます。

ランダム値の算出に関してはサーバ環境で問題無く処理される為、

今回は分かりやすくサーバ環境で確定させるものとします。

〇アクターのReplicates設定を有効化する

これにより、サーバーの情報がクライアントで再現されるようになります。

これから2つの方法をご紹介しますが、その下準備と捉えてもらって問題無いかと思います。

方法①Multicastを使用してサーバからクライアントへ情報を伝達する

サーバからイベントを実行する形で、クライアントへ情報を伝達する方法です。

 

・使用例

まずはクライアント側の処理から。

※厳密にはサーバ側でも処理が行われますが、ここでは割愛します

グラフ上でイベント「MC_Overlap」を新規作成し、設定から「Replicates」を「Multicast」に変更します。

そして、追加したInputsピンを使用して数値を反映させるようにしましょう。

次にサーバ側の処理です。

Overlap関数は全環境で処理される為、サーバでのみ処理が実行されるよう判定を加えています。

あとは先程作成した「MC_Overlap」を呼び出すだけです。

※補足

[UE5] 一度は試していただきたいテストレベル用機能3選

上記の記事でも少し触れていますが

Actorの設定「NetCullDistanceSquared」の距離外に存在するアクターには情報が伝達されず

処理が一切行われない為、ご注意ください。

方法②RepNotifyを使用してサーバからクライアントへ情報を伝達する

変数のReplication設定を利用し、RepNotify関数経由で情報を伝達する方法です。

 

・使用例

下記の画像内の順番で変数の作成、設定を行います。

次にクライアント側の処理です。

※厳密にはサーバ側でも処理が行われますが、ここでは割愛します

作成されたRepNotify関数「OnRep_ColorIndex」内に反映処理を追加します。

ここで、先程作成した変数を使用します。

最後にサーバ側の処理です。

先程追加された変数に値を入れるだけです。

■さいごに

ランダムな値を統一した上で、伝達、反映させる方法を2つご紹介しました。

今回はサーバ環境で値を確定させましたが

事前にどの環境から、どのように情報を伝達するのか設計してから

実装に取り掛かるようにしましょう。

本記事で説明し切れていないMulticastやRepNotifyの

より詳細な仕様や挙動に関しては

後述のリンク集にて掲載させていただいているスライドが

非常に分かりやすいので、是非併せてご覧ください。

■リンク集

「UE4 MultiPlayer Online Deep Dive: 実践編1」スライド(株式会社Byking様)
https://www.docswell.com/s/EpicGamesJapan/5WXDDZ-ue4-multiplayer-online-deep-dive-1-byking-ue4dd